使用服务上的$ watch更新AngularJS中的视图

时间:2014-06-26 16:55:15

标签: angularjs angularjs-scope

我是Angular的新手,我正在努力了解如何通过范围更改来更新视图。我正在尝试使用Angular JS根据用户是否登录来更新我的应用程序中的标题。这些信息由登录服务返回。

我已经将我的问题提炼成两个傻瓜,一个工作,一个没工作。

为了让它工作,我必须将我的LoginService分配给HeaderCtrl范围内的变量。

angular.module('app', [])
.controller('HeaderCtrl', function ($scope, LoginService) {

$scope.loginService = LoginService;

$scope.$watch('loginService.isLoggedIn()', function(newVal) {
    $scope.isLoggedIn = newVal;
});

这是工作版本 http://plnkr.co/edit/KBzE9N?p=preview

现在,如果我在HeaderCtrl的范围内删除对LoginService的引用,并直接在监视中使用注入的服务,则视图将停止更新。这在这里得到证明 http://plnkr.co/edit/IjFS2w?p=preview

有谁可以向我解释为什么第二种情况不起作用?我还读到,在控制器内安装手表是一个坏主意,所以我愿意接受更好的解决方案。

1 个答案:

答案 0 :(得分:0)

因为$ watch在您调用它的范围内监视范围变量。在你的第二个例子中,$ watch正在你的范围内寻找一个LoginService变量,当然这个变量不存在。