【发布时间】:2016-11-14 14:15:09
【问题描述】:
我正在使用 AngularJS UI Router Resolves 来检查用户是否经过身份验证。但它只被调用一次。第一个它可以正常工作,但是当我尝试再次进入页面时,它会跳过解析部分并打开页面。
.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 ,但它也没有以这种方式重新实例化。 $state.go("placeorder", {newOrder: $scope.newOrder}, { reload: true });
标签: angularjs angular-ui-router