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 获得默认解析