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;
}
}
})
現在它只是不能解決。
請問您可以添加一些關於ui路由器的狀態層次的更多細節?您是否可能引用了已處於活動狀態的相同狀態?如果控制器不能重新實例化,它也不會再解決。 –
是的,我確實......第一次打電話給我的狀態,它重定向到「登錄」,第二次我叫它,它重定向到「placeorder」(沒有輸入解析)。如何讓它每次都解決? –
我正在嘗試使用reload:在調用狀態時爲true,但它沒有以這種方式重新實例化。 (「placeorder」,{newOrder:$ scope.newOrder},{reload:true}); –