I'm trying to bind to rootscope so that I can set presence on a different server when the user logins. Here's my module.
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'
})
})
})
There's no controller because it's just about the global presence of the user and has nothing to do with the DOM.
This is not working, the watch runs once but never again on subsequent changes. Thanks for your help.
Edit: Login code looks like this:
$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
});
};
This code updates fine in the DOM. It shows the username in the html for example:
a.user(ui-if="currentUser", ng-href="/user/{{currentUser._id}}") {{currentUser.username}}
The syntax was $rootScope.$watch('currentUser')
not $rootScope.$watch($rootScope.currentUser)
Something needs to change $rootScope.currentUser
for you to be able to notice any changes in it. You have shared the code for that.
Also changes to $rootScope.currentUser
need to take place inside the angularJS loop (http://docs.angularjs.org/guide/concepts). If it is done externally you can call $digest (http://docs.angularjs.org/api/ng.$rootScope.Scope#$digest)
©2020 All rights reserved.