我的角度应用程序有一个小问题(我还在学习的过程中!),我有一个控制器,我试图在变量上放置$ 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声明。
谢谢, 尼克
答案 0 :(得分:2)
虽然您可以在控制器中观看范围内的项目,但这通常不是一个好主意,请阅读此blog post。我建议您从父作用域广播一个事件(因为它看起来像一个用户登录事件,可能是您想要它的地方),并且在您的控制器范围内,您可以处理事件被提出。
举办活动:
$rootScope.$broadcast('eventName', {prop1: 'some data'});
并听取广泛的事件:
$scope.$on('eventName', function (event, data) {
var temp = data.prop1;
});
答案 1 :(得分:1)
$watch
是$scope
,See 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..
});