2015-11-04 65 views
1

如果我把通知設置爲true,不呈現login.html,這是一個空白頁面。如果我把假的,但回報使得我在控制檯中的幾個誤區:Auth上的角度ui路由器的問題

RangeError: Maximum call stack size exceeded 
    at $.resolve (angular-ui-router.min.js:1) 
    at b (angular-ui-router.min.js:1) 
    at Object.x.transitionTo (angular-ui-router.min.js:1) 
    at Object.x.go (angular-ui-router.min.js:1) 
    at app.js:317 
    at p.$broadcast (angular.min.js:3) 
    at Object.x.transitionTo (angular-ui-router.min.js:1) 
    at Object.x.go (angular-ui-router.min.js:1) 
    at app.js:317 
    at p.$broadcast (angular.min.js:3) 

我的代碼路由器:

$rootScope.$on('$stateChangeStart', 
    function(event, toState, toParams, fromState, fromParams) { 

     var shouldLogin = !$window.sessionStorage.token && !AuthenticationService.isLogged; 

     $rootScope.Authenticated = shouldLogin; 

     //redirect only if both isAuthenticated is false and no token is set 
     // if (!AuthenticationService.isLogged && !$window.sessionStorage.token) { 
     //  $state.go('login'); 
     // } 

     //console.log($rootScope.Authenticated); 

     if(shouldLogin) { 
      $state.go('login', {}, {notify: false, location: false}); 
      event.preventDefault(); 
      return; 
     } 

    }); 
+1

的最大調用堆棧,當你有無限的回調通常發生。嘗試調試你的代碼思考這方面。 – Rodmentou

+2

不要在這裏使用'$ state.go'。導致另一個'$ stateChangeStart',這導致這個函數被再次評估,這導致另一個'$ state.go'等。 – Claies

+0

我使用$ location解決。 –

回答

1

我會說,你可以走你的路,只是......添加一行沒有自動跳轉,當已經將登錄:

$rootScope.$on('$stateChangeStart', 
    function(event, toState, toParams, fromState, fromParams) { 

    var alreadyGoingToLogin = toState.name === "login"; 
    if(alreadyGoingToLogin) { 
     return 
    } 
    ... 

檢查這些一起工作的例子:

+0

謝謝。 \t 我使用$ location解決。 –