【问题标题】:angularjs simplify $routeprovider resolveangularjs 简化 $routeprovider 解析
【发布时间】:2015-10-29 13:34:23
【问题描述】:

我定义了多条路线,例如:

$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 个承诺。必须为每条路由定义这个变得相当乏味......另外,当一个新服务出现时,它也需要无处不在,我必须用新的 Promise 修补所有路由。

无论用户首先访问哪个 URL,我希望我的应用程序首先预加载所有数据,然后显示正确的控制器,而无需为每个控制器指定它。

【问题讨论】:

    标签: angularjs routes simplify resolve


    【解决方案1】:

    基本上你必须创建自己的 $routeProvider 版本(只需扩展默认版本),然后扩展默认 .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 来获得默认解析

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多