我试图通过扩展 route.resolve
来强制异步调用在解析任何路由之前完成,如下所示:
var originalWhen = $routeProvider.when;
$routeProvider.when = function(path, route) {
route.resolve || (route.resolve = {});
angular.extend(route.resolve, {
availableCodes: function($rootScope, numbersService) {
if ($rootScope.isAuthenticated) {
numbersService.getAvailableCodes().$promise.then(function(data) {
$rootScope.availableCodes = data.codes;
console.log('resolve: ' + Date.now());
});
}
}
});
return originalWhen.call($routeProvider, path, route);
};
令我困惑的是,当我向 Controller 添加 console.log('controller: ' + Date.now())
时,记录的时间显示 Controller 在我的 Controller 之前加载。我的解析中的异步调用返回了。我的印象是,在解析中的异步调用确实得到解决之前,我的 Controller 不会触发。我在这里缺少什么?
最佳答案
是的,显示的when
补丁应该按预期工作。
应该是
return numbersService.getAvailableCodes().$promise.then(function(data) {
...
使用此 promise 作为路由解析。
关于javascript - Angular 通用解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35900125/