我想解决为我的应用程序的所有页面加载当前用户的承诺。 现在我在路线的每个$ 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();
}
}
});
我的目标是为所有路线解析当前用户而不重复。
答案 0 :(得分:27)
为了完整性,这里是整个解决方案,使用角度而不是下划线,带有可链接的'当'。这段代码没有什么新内容,只是结合了上面的一堆答案。
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);
};
答案 1 :(得分: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);
};
}]);
您可能希望在其中添加一些错误检查,并使用类似underscores defaults
方法的方法,而不是仅覆盖现有的resolve属性,但至少这样您可以保证所有路由都具有您想要的内容。
将它包装成辅助方法也很容易。
答案 2 :(得分:4)
@Josh的回答是正确的,除非您必须以不同的方式调用 originalWhen 函数:
originalWhen.call($routeProvider, path, route);
答案 3 :(得分:3)
@ N13和我都无法使@Josh's solution工作。但这对我有用:
module.config(['$routeProvider', function($routeProvider){
$routeProvider.accessWhen = function(path, route){
route.resolve || (route.resolve = {});
route.resolve.language = "something"
return $routeProvider.when(path, route);
};
}]);
用于:
$routeProvider
.accessWhen('/login', {
...
});
答案 4 :(得分:2)
我发现这个案子好多了:
angular.extend({}, $routeProvider, {
when: function(path, route) {
route.resolve || (route.resolve = {});
route.resolve = angular.merge({}, route.resolve, {
chef: 'OrganizationCheckerProvider'
});
return $routeProvider.when(path, route);
}
});
答案 5 :(得分:0)
对于那些坚持旧代码库的人。
org.apache.kafka.clients