角度值服务不更新视图

时间:2015-03-21 18:50:02

标签: angularjs

我正在建立一个测验,在主页上我允许人们输入他们的名字,所以它一直显示在屏幕上。我认为价值服务是最好的。

MainCtrl:

angular
        .module('myQuiz')
        .controller('MainController', ["CONSTANTS", 'User', MainController]);

    function MainController(CONSTANTS, User) {  

        vm = this;

        vm.title = CONSTANTS.TITLE;

        vm.user = User.name;     
    };

values.js

angular
    .module('myQuiz')
    .value("User", {
        name: "John Doe"
    });

HomeCtrl是mainctrl的孩子:

angular
        .module('myQuiz')
        .controller('HomeController', ['$scope', '$location', 'User', HomeController]);

    function HomeController($scope, $location, User) {

        $scope.test = "Enter your name to start the quiz";

        $scope.user;

        function startQuiz (name) {
            setUserName(name);
            return $location.path('/quiz');
        }

        function setUserName(name) {
            User.name = name;
            console.log(User.name);
        }

        $scope.startQuiz = startQuiz;



    };

在mainctrl中显示John Doe,但是当我控制台登录时,它会显示正确的输入。为什么不更新?

1 个答案:

答案 0 :(得分:1)

vm.user = User.name;更改为vm.user = User;

这是因为您尝试绑定到基本数据类型(String)。您需要绑定到对象。以下是关于原因的非常好的解释:

  

范围继承通常很简单,你甚至不需要知道它正在发生......直到你尝试双向数据绑定(即表单元素,ng-model)到一个原语(例如,数字) ,string,boolean)在子范围内从父范围定义。它不像大多数人期望的那样工作。会发生什么是子范围获取其自己的属性,该属性隐藏/隐藏同名的父属性。这不是AngularJS正在做的事情 - 这就是JavaScript原型继承的工作方式。

     

来源:https://github.com/angular/angular.js/wiki/Understanding-Scopes

以下是另一篇可能更容易理解的文章:http://www.codelord.net/2014/05/10/understanding-angulars-magic-dont-bind-to-primitives/

相关问题