2013-06-02 23 views
36

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}} 
+0

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. –

+0

@xmltechgeek können Sie ein Beispiel geben, wie man es richtig macht? Das klingt nach dem, was ich lernen muss, danke – Harry

+0

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

Antwort

63

Die Syntax war $rootScope.$watch('currentUser') nicht $rootScope.$watch($rootScope.currentUser)

+1

Hallo, wo schreiben Sie diese Aussage? –

+0

Überall, wo Sie ein $ rootScope injiziert haben. –

1

Es muss etwas $rootScope.currentUser ändern für Sie in es Änderungen in der Lage sein zu bemerken. Sie haben den Code dafür geteilt.

Auch Änderungen an $rootScope.currentUser müssen innerhalb der angularJS-Schleife (http://docs.angularjs.org/guide/concepts) erfolgen. Wenn es fertig ist extern können Sie $ verdauen nennen (http://docs.angularjs.org/api/ng. $ RootScope.Scope # $ digest)

+0

Ich habe meine Frage aktualisiert Danke für Ihre Hilfe – Harry

Verwandte Themen