Ich versuche, an rootscope zu binden, so dass ich Präsenz auf einem anderen Server festlegen kann, wenn der Benutzer sich anmeldet. Hier ist mein Modul.angularjs Beobachten rootscope Änderungen
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'
})
})
})
Es gibt keinen Controller, weil es nur um die globale Präsenz des Nutzers ist und hat nichts mit dem DOM zu tun.
Dies funktioniert nicht, die Uhr läuft einmal, aber nie wieder bei nachfolgenden Änderungen. Danke für Ihre Hilfe.
bearbeiten: Anmeldung Code wie folgt aussieht:
$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
});
};
Dieser Code aktualisiert im DOM in Ordnung. Es zeigt den Benutzernamen in den HTML-Code zum Beispiel:
a.user(ui-if="currentUser", ng-href="/user/{{currentUser._id}}") {{currentUser.username}}
RootScope nur der Stammbereich für diese Instanz der Anwendung ist möchten Sie stattdessen einen Service/eine Fabrik zu nutzen und die Anwesenheitsänderung irgendwie zu verändern. –
@xmltechgeek können Sie ein Beispiel geben, wie man es richtig macht? Das klingt nach dem, was ich lernen muss, danke – Harry
versuchen Sie, den '$ rootScope.currentUser' auch bei einem Fehler auf einen Dummy-Wert zu setzen, um zu prüfen, ob das die Ursache ist. – basarat