2013-06-02 15 views
36

Próbuję powiązać z rootcopem, dzięki czemu mogę ustawić obecność na innym serwerze, gdy użytkownik się loguje. Oto mój moduł.angularjs Obserwowanie zmian korzeni

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' 
    }) 
    }) 
}) 

Nie ma kontrolera, ponieważ chodzi tylko o globalną obecność użytkownika i nie ma nic wspólnego z DOM.

To nie działa, zegarek uruchamia się raz, ale nigdy więcej, po kolejnych zmianach. Dzięki za pomoc.

Edycja: Kod logowania wygląda następująco:

$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 
    }); 
    }; 

Ten kod aktualizuje porządku w DOM. Pokazuje nazwę użytkownika w formacie HTML, na przykład:

a.user(ui-if="currentUser", ng-href="/user/{{currentUser._id}}") {{currentUser.username}} 
+0

RootScope jest tylko zakres korzeń dla tej instancji aplikacji będziesz chciał zamiast tego używać usługi/fabryki i jakoś utrzymywać gdzieś zmianę obecności. –

+0

@xmltechgeek możesz podać przykład, jak to zrobić poprawnie? To brzmi jak to, czego potrzebuję się uczyć dzięki – Harry

+0

spróbować ustawić '$ rootScope.currentUser' na fałszywą wartość przy błędzie, a także sprawdzić, czy to jest przyczyną. – basarat

Odpowiedz

63

Składnia był $rootScope.$watch('currentUser') nie $rootScope.$watch($rootScope.currentUser)

+1

Witam, gdzie piszesz to stwierdzenie? –

+0

Gdziekolwiek wstrzyknięto $ rootScope. –

1

Coś musi się zmienić $rootScope.currentUser, aby być w stanie dostrzec żadnych zmian w nim. Udostępniłeś kod dla tego.

Również zmiany w $rootScope.currentUser muszą się odbyć wewnątrz pętli angularJS (http://docs.angularjs.org/guide/concepts). Jeśli to się robi z zewnątrz można nazwać $ strawienia (http://docs.angularjs.org/api/ng. $ RootScope.Scope # $ likwidacji)

+0

Zaktualizowałem moje pytanie dzięki za pomoc – Harry

Powiązane problemy