对象没有方法$ watch

时间:2014-03-31 02:46:15

标签: angularjs angularjs-scope

我的角度应用程序有一个小问题(我还在学习的过程中!),我有一个控制器,我试图在变量上放置$ watch语句。以下是适用的代码片段:

    var controllerId = 'header';
angular.module('app').controller(controllerId,
    ['$rootScope', 'common', 'routes', 'authorization', header]);

function header($route, config, routes, authorization) {
    var vm = this;

        vm.$watch(function () { return authorization.currentUser.firstName; },
        function (value) {
            vm.userName = value;
        });
}();

授权是我创建的自定义服务。它将在用户提供时更新名字(在另一个控制器上)。

我只是不确定我错过了什么(关于$ watch声明。

谢谢, 尼克

2 个答案:

答案 0 :(得分:2)

虽然您可以在控制器中观看范围内的项目,但这通常不是一个好主意,请阅读此blog post。我建议您从父作用域广播一个事件(因为它看起来像一个用户登录事件,可能是您想要它的地方),并且在您的控制器范围内,您可以处理事件被提出。

举办活动:

$rootScope.$broadcast('eventName', {prop1: 'some data'});

并听取广泛的事件:

$scope.$on('eventName', function (event, data) {
    var temp = data.prop1;
});

答案 1 :(得分:1)

$watch$scopeSee the documentation

上的一项功能
function header($scope, $route, config, routes, authorization) {
    var vm = this;

    $scope.$watch(function () { return authorization.currentUser.firstName; },
        function (value) {
            vm.userName = value;
    });
}

但是你需要在这里考虑一下你不能在服务中看$变量。您只能观看分配给$ scope的变量。

如果您有这样的变量,

$scope.userName="test"

你可以这样看待它,

$scope.$watch('userName',function (){
//do your work here..
});