我正在尝试绑定到rootscope,以便在用户登录时可以在不同的服务器上设置状态。 这是我的模块。
angular.module('presence',
[
]
)
.run(function ($rootScope) {
$rootScope.$watch($rootScope.currentUser, function () {
console.log('change currentUser')
console.log($rootScope.currentUser)
presence.setGlobal({
u: $rootScope.currentUser,
s: 'on'
})
})
})
没有控制器,因为它只是用户的全球存在而与DOM无关。
这不起作用,手表只运行一次,但从未在后续更改中运行。谢谢你的帮助。
编辑:登录代码如下所示:
$scope.login = function() {
$http.post('http://localhost:3000/login', $scope.user).success(function(res, status) {
if (res && res._id) {
$rootScope.currentUser = res
}
}).error(function(res, status) {
$scope.error = res.err
});
};
此代码在DOM中正常更新。它显示了html中的用户名,例如:
a.user(ui-if="currentUser", ng-href="/user/{{currentUser._id}}") {{currentUser.username}}
答案 0 :(得分:67)
语法为$rootScope.$watch('currentUser')
而非$rootScope.$watch($rootScope.currentUser)
答案 1 :(得分:1)
有些内容需要更改$rootScope.currentUser
,以便您能够注意到其中的任何更改。您已经共享了该代码。
$rootScope.currentUser
的更改也需要在angularJS循环(http://docs.angularjs.org/guide/concepts)内进行。如果是在外部完成的,你可以调用$ digest(http://docs.angularjs.org/api/ng。$ rootScope.Scope#$ digest)