angularjs简化$ routeprovider resolve

时间:2015-08-06 11:57:27

标签: angularjs routes simplify 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();
    }]
  }
})

我确实需要解决所有这三个承诺,几乎每个网址都有。为每一条路线定义它是相当繁琐的......另外,当一个新服务出现时,到处都需要它,我必须用新的承诺修补所有路线。

我想为我的应用程序提供的内容,无论用户首先登陆的是什么网址,都是先预先加载所有数据然后显示正确的控制器,而不是为每个控制器指定。

1 个答案:

答案 0 :(得分:0)

基本上你必须创建自己的$ routeProvider版本(只需扩展默认版本),然后扩展默认值。当最后一步是扩展路径参数的.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

进行默认解析