Wpis z mikrobloga

Mircy mam serwis z taka zmienna jak var authenticated. Na start wpisuje do niej false.

Zmieniam tą zmienną w metodach serwisu takich jak np init ( metoda ta sprawdza czy użytkownik jest zalogowany, jeżeli tak zmienia zmienna na true). Każda taka zmianę zmiennej rozgłaszam broadcastem.

Problem mam taki: podpinam sobie ten serwis pod jakąs podstrone(controller, widok, moduł). W widoku w pierwszym divie wykonuje metode z controllera przez ng-init="init()". Metoda ta w controllerze to

$scope.init = function(){
AuthService.init();
};

Poza tym w kontrolerze mam:

$scope.$on('auth.loggedin', function() {
$scope.authenticated = AuthService.getAuthenticated();
});

Problem jest taki, że po pierwsze przez chwile zmienna authenticated jest false, co powoduje ze w widoku zmienna ta dopiero po chwili zmienia sie na true. A użytkownik nie-zalogowany w tym czasie widzi to co powinien tylko zalogowany(przez ułamek sekundy, ale jednak). Po drugie w kontrolerze tym chciałbym sprawdzać czy użytkownik jest zalogowany $scope.authneticated === true i wtedy przekierowac go na jakas podstrone(przez to ze ta zmienna jest przez chwile false, if ten jest nieprawdziwy, więc ten kawałek kodu z przekierowaniem się nie wywołuje)

Jak macie jakieś pomysły jak to ogarnąć to czekam na pomoc, dzięki.

#angularjs
  • 2
  • Odpowiedz
@Gottek: Po pierwsze, to ustaw tak by domyślnie był widoczny widok dla NIE zalogowanego. a dopiero jak authenticated ustawi się na true to wyswietl wlasciwą stronę.

po drugie mozesz tak sprawdzić ale dopiero po wykonaniu się zapytania. Serwis powinien zwracać Ci promisa (używaj w nim np,. $resources).
Wtedy mozesz zrobic
AuthService.getAuthenticated().$promise.then(function(result){
if(result.IsAuthenticated)
{
// tutaj przejdz na jakaś podstrone
}
});
  • Odpowiedz
@niepoprawnyhumanista: pomylilem sie, zmienna jest ustawiona na false, wiec odwrotnie uzytkownik zalogowany widzi przez chwile to co niezalogowany. W widoku używam do tego po prostu ng-show i ng-hide do tej zmiennej authenticated.

Co do drugiego, w kontrolerze w ktorym chce sprawdzic zmienna authenticated daje:

AuthService.getAuthenticated().$promise.then(function(result){
if(result.IsAuthenticated)
{
// tutaj przejdz na jakaś podstrone
}
});

a w serwisie w jaki sposób to zapisać, bo nie ogarniam. Używam ngResource ale do komunikacji
  • Odpowiedz