我是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
有谁可以向我解释为什么第二种情况不起作用?我还读到,在控制器内安装手表是一个坏主意,所以我愿意接受更好的解决方案。
答案 0 :(得分:0)
因为$ watch在您调用它的范围内监视范围变量。在你的第二个例子中,$ watch正在你的范围内寻找一个LoginService变量,当然这个变量不存在。