2014-07-07 10 views
9


mam kątowym app JS z backend Sails JS, a wewnątrz trasach (w app.js) Mam:

.state('app.detail', { 
    url: "/detail", 
    views: { 
    'menuContent' :{ 
     templateUrl: "templates/detail.html", 
     controller: 'UserUpdateCtrl', 
     resolve: { 
     auth: ["$q", "userData", function($q, userData) { 
      var userInfo = userData.getUserInfo(); 
      if (userInfo) { 
      return $q.when(userInfo); 
      } else { 
      return $q.reject({ authenticated: false }); 
      } 
     }] 
     }, 
    } 
    } 
}) 

(to obserwuje this guide)

teraz na tym samym pliku, mam $ routeChangeError:

.run(function($rootScope) { 
    $rootScope.$on("$routeChangeError", function(event, current, previous, eventObj) { 
    if (eventObj.authenticated === false) { 
     $location.path("/login"); 
    } 
    }); 

Kiedy debugowanie na chrome, widzę, że funkcja jest zdefiniowana, ale nie wywołana.
Czego mi tu brakuje?

+0

może nie masz < ui-view >? –

+5

Na pewno chcesz '$ stateChangeError' ... – ivarni

+0

Ok to wywołanie' $ stateChangeError' ale zmienna 'eventObj.authenticated' jest niezdefiniowana (eventObj:' Object {nazwa: "", url: "^", widoki: null , abstract: true} ') – Asaf

Odpowiedz

9

OK, więc przy założeniu, że używasz routera Angular UI, wydaje mi się, że po prostu nieprawidłowo tłumaczysz obsługę błędu z oficjalnego.

Z docs for $state:

Fired when an error occurs during transition. It's important to note that if you have any errors in your resolve functions (javascript errors, non-existent services, etc) they will not throw traditionally. You must listen for this $stateChangeError event to catch ALL errors.

a parametry dla tego przewodnika są różne, spróbuj coś takiego:

$rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, fromParams, error) { 
    if (error && !error.authenticated) { 
    $location.path("/login"); 
    } 
}); 

Oto opis parametrów z ważnym jednego pogrubionej:

  • wydarzenie - {Obiekt} - Obiekt zdarzenia.
  • toState - {Stan} - Stan przeniesiony do.
  • toParams - {Object} - Parametry dostarczane do toState.
  • fromState - {Stan} - Aktualny stan, wstępne przejście.
  • fromParams - {Object} - Parametry dostarczane do fromState.
  • błąd - {Błąd} - Obiekt błędu rozwiązania.
+0

Wszystko działa oprócz '$ location.path', które z jakiegoś powodu nie przekierowuje (część ścieżki jest poprawna, jeśli to pomaga) – Asaf

+3

Daj spokój, masz tutaj wzór ze swoimi problemami, używasz $ state zamiast $ location . Przeczytaj dokumentację, prawdopodobnie powinna to być '$ state.go()' lub coś podobnego. – Terry

+1

Wielkie dzięki, czasami angularjs pozwala mi zapomnieć, jak działa podstawowa logika. – Asaf