我正在尝试向我的应用程序中的每个状态添加一个解析器函数,以等待应用程序“启动”过程完成。我已经有以下代码:
angular.forEach($state.get(), function(state) {
state.resolve = state.resolve || {};
state.resolve.session = function() {
return SessionResolver.handle(state);
}
});
SessionResolver 是一种服务,其中 handle(state)
函数返回一个 promise ,一旦启动过程完成,该 promise 就会得到解决。
除非定义了一个没有现有 resolve
对象的状态,否则它工作正常。例如,以下状态将阻塞,直到 SessionResolver.handle promise 解决:
$stateProvider.state('dashboard', {
url: "/",
templateUrl: "dashboard.html",
controller: "DashboardCtrl",
resolve: {}
});
但如果未设置解析对象,则状态不会阻塞:
$stateProvider.state('dashboard', {
url: "/",
templateUrl: "dashboard.html",
controller: "DashboardCtrl",
});
我宁愿不向我的每个状态添加一个空的 resolve
对象,因为我也可以在我处于状态时向它们添加 SessionResolver.handle resolve 函数。
除非解析对象已经存在,否则为什么动态添加解析函数到状态失败的任何想法?
最佳答案
我是这样解决问题的:
angular.module('sample', ['ui.router']).config(function($stateProvider) {
var $delegate = $stateProvider.state;
$stateProvider.state = function(name, definition) {
definition.resolve = angular.extend({}, definition.resolve, {
myCustomResolve: function() { return true; }
});
return $delegate.apply(this, arguments);
};
$stateProvider.state('example', { url: 'example/' });
}).run(function($state) { console.log('have resolve?', $state.get('example')); });
关于javascript - Angular ui-router动态地为所有状态添加解析功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24161988/