在 ui-router 中使用解析时,是否可以在某个状态上的其他解析启动之前先解析某些内容(例如身份验证检查)?
这是我现在如何进行身份验证检查的示例:
angular.module('Example', [
'ui.router',
'services.auth',
'services.api'
])
.config(['$stateProvider', function ($stateProvider) {
$stateProvider.state('order', {
url: '/order',
views: {
'main': {
templateUrl: 'order/order.tpl.html',
controller: 'OrderCtrl'
}
},
resolve: {
// I want this one to resolve before any of the others even start.
loggedIn: ['auth', function (auth) {
return auth.loggedIn();
}],
cards: ['api', function (api) {
return api.getCards();
}],
shippingAddresses: ['api', function (api) {
return api.getShippingAddresses();
}]
}
});
}]);
我希望在 cards
和 shippingAddresses
启动之前首先解析 loggedIn
。
我可以将其他 API 调用放入 Controller 中(这就是它们之前所在的位置),但我希望在模板开始渲染之前从它们检索到的数据可用。
这可能有效,但我无法注入(inject)每个单独 API 调用的解析值。
...
resolve: {
// I want this one to resolve before any of the others even start.
loggedIn: ['auth', 'api', function (auth, api) {
return auth.loggedIn()
.then(api.getCards())
.then(api.getShippingAddresses())
.then(function () {
// whatever....
});
}]
}
...
编辑:
看起来像答案here解决了我的问题,也许这不是解决这个问题的最佳方法,但它有效。
只需注入(inject)身份验证检查的已解析值,它就会等到该值解析后才继续进行其他解析。
...
resolve: {
// I want this one to resolve before any of the others even start.
loggedIn: ['auth', function (auth) {
return auth.loggedIn();
}],
cards: ['api', 'loggedIn', function (api, loggedIn) {
return api.getCards();
}],
shippingAddresses: ['api', 'loggedIn', function (api, loggedIn) {
return api.getShippingAddresses();
}]
}
...
我会自己回答这个问题,但我会开放给其他人提供他们的解决方案。
最佳答案
我提供了一些如何将 Promise 组合在一起的概念证明:http://jsfiddle.net/pP7Uh/1/
任何拒绝都会阻止调用下一个 then
方法
resolve: {
data: function (api) {
var state;
return api.loggedIn().then(function(loggedIn) {
state = loggedIn
return api.getCards();
}).then(function(getCards) {
return {
loggedIn: state,
getCards: getCards
}
}).catch(function(error) {
console.error('error', error)
});
}
}
在此之后的数据解析对象中,您将拥有:
{
loggedIn:"calling loggedIn",
getCards:"calling getCards"
}
关于javascript - Angular ui-router,可以在其他解析之前解析身份验证检查吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24213780/