2016-07-12 36 views
1

我正在使用AngularJS UI路由器解決檢查用戶是否驗證。但它只被調用一次。第一個是它應該的,但是當我嘗試再次進入頁面時,它會跳過解析部分並打開頁面。AngularJS UI路由器解析不叫第二次

.state('login', { 
    url: "/login/:state/:stateParams", 
    templateUrl: "views/main.html", 
    params: { 
      stateParams: "" 
     } 
    }) 
.state('placeorder', { 
    url: "/placeorder", 
    templateUrl: "views/placeorder.html", 
    params: { 
     newOrder: { 
      from: null, 
      to: null, 
      selectedLogType: null, 
      selectedLogSubType: null 
     } 
    }, 
    resolve: { 
     auth: function ($cookies, $stateParams, $location) { 
      if (!angular.isDefined($cookies.get('token'))) { 
       $location.path('/login/placeorder/'+JSON.stringify($stateParams.newOrder)); 
      } 
      else { 
       authService.checkToken().then(function (d) { 
       if (d == false) { 
         $location.path('/login/placeorder/'+JSON.stringify($stateParams.newOrder)); 
        } 
       }); 
      } 
     } 
    } 
}); 

更新: 我已經改變了它下面,當沒有設置Cookie,但對於異步功能,它不工作它的工作原理。當我登錄,這是行不通的($ q.resolve部分)

.state('placeorder', { 
    url: "/placeorder", 
    templateUrl: "views/placeorder.html", 
    params: { 
     newOrder: { 
      from: null, 
      to: null, 
      selectedLogType: null, 
      selectedLogSubType: null 
     } 
    }, 
    controller: "placeOrderCtrl", 
    resolve: { 
     auth: function ($q, $cookies, $timeout, $stateParams, $state) { 
      var defer = $q.defer(); 
      if (!angular.isDefined($cookies.get('token'))) { 
       $timeout(function() { 
        $state.go('/login/placeorder/'+JSON.stringify($stateParams.newOrder)); 
       }); 
       defer.reject(); 
      } 
      else { 
       authService.checkToken().then(function (d) { 
        if (d == false) { 
         $timeout(function() { 
          $state.go('/login/placeorder/'+JSON.stringify($stateParams.newOrder)); 
         }); 
         defer.reject(); 
        } 
        else 
        { 
         defer.resolve(); 
        } 
       }); 
      } 
      return defer.promise; 
     } 
    } 
}) 

現在它只是不能解決。

+0

請問您可以添加一些關於ui路由器的狀態層次的更多細節?您是否可能引用了已處於活動狀態的相同狀態?如果控制器不能重新實例化,它也不會再解決。 –

+0

是的,我確實......第一次打電話給我的狀態,它重定向到「登錄」,第二次我叫它,它重定向到「placeorder」(沒有輸入解析)。如何讓它每次都解決? –

+0

我正在嘗試使用reload:在調用狀態時爲true,但它沒有以這種方式重新實例化。 (「placeorder」,{newOrder:$ scope.newOrder},{reload:true}); –

回答

0

好的,最後我找到了解決方案。無論如何,謝謝:)

.state('placeorder', { 
    url: "/placeorder", 
    templateUrl: "views/placeorder.html", 
    params: { 
     newOrder: { 
      from: null, 
      to: null, 
      selectedLogType: null, 
      selectedLogSubType: null 
     } 
    }, 
    controller: "placeOrderCtrl", 
    resolve: { 
     auth: function ($q, $cookies, $timeout, $stateParams, $state, authService) { 
      var defer = $q.defer(); 
      if (!angular.isDefined($cookies.get('token'))) { 
       $timeout(function() { 
        $state.go('/login/placeorder/'+JSON.stringify($stateParams.newOrder)); 
       }); 
       defer.reject(); 
      } 
      else { 
       authService.checkToken().then(function (d) { 
        if (d == false) { 
         $timeout(function() { 
          $state.go('/login/placeorder/'+JSON.stringify($stateParams.newOrder)); 
         }); 
         defer.reject(); 
        } 
        else 
        { 
         defer.resolve(); 
        } 
       }); 
      } 
      return defer.promise; 
     } 
    } 
})