【问题标题】:$routeProvider - Injecting same dependency for all routes$routeProvider - 为所有路由注入相同的依赖项
【发布时间】:2014-01-07 04:04:54
【问题描述】:

以下代码:

$routeProvider .when("/page1", { controller: "MyController", resolve: {Strategy: "StrategyOne"}})

在实例化控制器“MyController”之前等待策略依赖被解析。

在我的应用程序中,我有一个函数,它返回一个承诺,当它被解决时,它会提供给当前用户。让我们调用那个函数Authentication.currentUser()

我希望我的应用程序的所有页面在呈现页面之前等待该承诺得到解决。我可以很乐意为每个路由声明添加一行,但我宁愿避免重复。

由于我的模板中的这一行,我有一个名为“MainCtrl”的控制器,它被所有页面调用:

<html ng-app="clientApp" ng-controller="MainCtrl">

我认为解决此问题的一种可能方法是,是否可以在控制器级别将 Authentication.currentUser() 指定为“MainCtrl”的依赖项(而不是在路由级别,因为此依赖项不依赖于特定路由) .

感谢你们的帮助!

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    对于那些想用标准的 $routeProvider 解决这个问题的人,这是我想出来的:

    $rootScope.$on('$routeChangeStart', function (event, next, current) {
      if (!next.resolve){ next.resolve = {} }
      next.resolve.currentUser =  function(Authentication){
        return Authentication.currentUser();
      };
    });
    

    【讨论】:

      【解决方案2】:

      如果您可以从默认路由器移动到ui-router,那么您可以使用嵌套状态执行此操作。只是从https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views#inherited-resolved-dependencies 复制示例:

      $stateProvider.state('parent', {
        resolve:{
           resA:  function(){
              return {'value': 'A'};
           }
        },
        controller: function($scope, resA){
            $scope.resA = resA.value;
        }
      })
      .state('parent.child', {
        resolve:{
           resB: function(resA){
              return {'value': resA.value + 'B'};
           }
        },
        controller: function($scope, resA, resB){
            $scope.resA2 = resA.value;
            $scope.resB = resB.value;
        }
      

      【讨论】:

      • 谢谢,我要试试ui-router
      猜你喜欢
      • 2015-05-13
      • 2015-04-16
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      相关资源
      最近更新 更多