angularjs 简化 $routeprovider 解析
angularjs simplify $routeprovider resolve
我定义了多个路由,例如:
$routeProvider
.when('/:locale/pages/:id/edit', {
templateUrl: 'pages/index.html',
controller: 'PageEditController',
resolve: {
pages: ['pageService', function(pageService){
return pageService.readyPromise();
}],
locales: ['localeService', function(localeService){
return localeService.readyPromise();
}],
template: ['templateService', function(templateService){
return templateService.readyPromise();
}]
}
})
我确实需要为几乎所有 URL 兑现所有这 3 个承诺。必须为每条路线定义它变得相当乏味......另外,当出现到处都需要的新服务时,我必须用新承诺修补所有路线。
我希望我的应用程序具备的条件是,无论 URL 用户首先登陆什么,首先预加载所有数据,然后显示正确的控制器,而不是为每个控制器指定它控制器。
基本上你必须创建自己的 $routeProvider 版本(只需扩展默认版本),然后扩展 default .when 最后一步是扩展路由参数的 .resolve 方法
像这样
var basicResolves = ... // here your basic resolve functions
var myRouteProvider = angular.extend({}, $routeProvider, {
when: function(path, route) {
route.resolve = (route.resolve) ? route.resolve : {};
angular.extend(route.resolve, basicResolves);
$routeProvider.when(path, route);
return this;
}
});
您将通过使用 myRouterProvider 而不是默认的 $routeProvider 获得默认解析
我定义了多个路由,例如:
$routeProvider
.when('/:locale/pages/:id/edit', {
templateUrl: 'pages/index.html',
controller: 'PageEditController',
resolve: {
pages: ['pageService', function(pageService){
return pageService.readyPromise();
}],
locales: ['localeService', function(localeService){
return localeService.readyPromise();
}],
template: ['templateService', function(templateService){
return templateService.readyPromise();
}]
}
})
我确实需要为几乎所有 URL 兑现所有这 3 个承诺。必须为每条路线定义它变得相当乏味......另外,当出现到处都需要的新服务时,我必须用新承诺修补所有路线。
我希望我的应用程序具备的条件是,无论 URL 用户首先登陆什么,首先预加载所有数据,然后显示正确的控制器,而不是为每个控制器指定它控制器。
基本上你必须创建自己的 $routeProvider 版本(只需扩展默认版本),然后扩展 default .when 最后一步是扩展路由参数的 .resolve 方法
像这样
var basicResolves = ... // here your basic resolve functions
var myRouteProvider = angular.extend({}, $routeProvider, {
when: function(path, route) {
route.resolve = (route.resolve) ? route.resolve : {};
angular.extend(route.resolve, basicResolves);
$routeProvider.when(path, route);
return this;
}
});
您将通过使用 myRouterProvider 而不是默认的 $routeProvider 获得默认解析