更新 :好吧,您每天都会学到一些新东西…只需删除
()即可查看函数的结果:
$scope.$watch(Auth.isAuthenticated, function() { ... });[Updated fiddle](http://jsfiddle.net/mrajcok/wzECr/2/)
在这个小提琴中,请注意,当值
$scope.isAuthenticated更改时,“ watch1”和“ watch3”如何触发第二次。
因此,这是 监视 服务上定义的 原始 值的更改的通用技术:
- 定义返回原语(值)的API /方法
- $看那个方法
要 监视对 服务上定义的 对象或数组的 更改:
- 定义返回对象/数组(对其的引用)的API /方法
在服务中,请注意仅修改对象/数组,不要重新分配它。
例如,不要这样做:user = ...;
而是,这样做:angular.copy(newInfo, user)
或这样:user.email = ...
通常,您将为该方法的结果分配一个本地$ scope属性,因此$ scope属性将是对实际对象/数组的引用
- $ watch范围属性
例:
$scope.user = Auth.getUser();// Because user is a reference to an object, if you change the object// in the service (i.e., you do not reassign it), $scope.user will// likewise change.$scope.$watch('user', function(newValue) { ... }, true);// Above, the 3rd parameter to $watch is set to 'true' to compare// equality rather than reference. If you are using Angular 1.2+// use $watchCollection() instead:$scope.$watchCollection('user', function(newValue) { ... });原始答案:
要观察一个函数的结果,您需要传递$ watch一个包装该函数的函数:
$scope.$watch( function() { return Auth.isAuthenticated() }, function() { ... });小提琴。在小提琴中,请注意,当值
$scope.isAuthenticated更改时,只有“
watch3”如何触发第二次。(它们都最初触发,作为$ watch初始化的一部分。)



