$ routeProvider - 为所有路由注入相同的依赖项

时间:2014-01-07 04:04:55

标签: javascript angularjs

以下代码:

  

$ routeProvider      .when(“/ page1”,{controller:“MyController”,解决:{策略:“策略1”}})

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

在我的应用程序中,我有一个函数,它返回一个promise,当它被解析时,它会给当前用户。我们称之为函数Authentication.currentUser()

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

我有一个名为'MainCtrl'的控制器,所有页面都被调用,这要归功于我的模板中的这一行:

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

我认为解决这个问题的一种可能方法是,如果可以在控制器级别指定Authentication.currentUser()作为“MainCtrl”的依赖关系(而不是在路由级别,因为这种依赖关系不依赖于特定的路线)。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

如果您可以从默认路由器移至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;
  }