我想解决为我的应用程序的所有页面加载当前用户的承诺.现在我在路由的每个$ routeProvider.when()中重复解析.
$routeProvider.when('/users/edit/:userId', {
templateUrl: 'app/app/assets/partials/user-edit.html',
controller: 'UserEditController',
resolve:{
'currentUser':function( UserService){
return UserService.getCurrentUser();
}
}
});
$routeProvider.when('/staff_profil/edit', {
templateUrl: 'app/app/assets/partials/profil-edit.html',
controller: 'ProfilEditController',
resolve:{
'currentUser':function( UserService){
return UserService.getCurrentUser();
}
}
});
Run Code Online (Sandbox Code Playgroud)
我的目标是为所有路线解析当前用户而不重复.
Jor*_*app 27
为了完整性,这里是整个解决方案,使用角度而不是下划线,带有可链接的"when".这段代码没有什么新内容,只是结合了上面的一堆答案.
var originalWhen = $routeProvider.when;
$routeProvider.when = function(path, route) {
route.resolve || (route.resolve = {});
angular.extend(route.resolve, {
CurrentUser : function(User) {
return User.current();
}
});
return originalWhen.call($routeProvider, path, route);
};
Run Code Online (Sandbox Code Playgroud)
Jos*_*osh 24
您始终可以$routeProvider使用自己的实现将现有的when方法包装起来.
var myModule = angular.module('myModule', ['ngRoute'])
.config(['$routeProvider', function($routeProvider){
var originalWhen = $routeProvider.when;
$routeProvider.when = function(path, route){
route.resolve = {
'currentUser':function( UserService){
return UserService.getCurrentUser();
}
};
return originalWhen(path, route);
};
}]);
Run Code Online (Sandbox Code Playgroud)
您可能希望在其中添加一些错误检查,并使用下划线defaults方法而不是仅覆盖现有的resolve属性,但至少这样您可以保证所有路由都具有您想要的.
将它包装成辅助方法也很容易.
| 归档时间: |
|
| 查看次数: |
10494 次 |
| 最近记录: |