如何使用$ routeProvider的resolve param使用显式注入器声明?

时间:2012-10-10 13:04:32

标签: javascript dependency-injection angularjs

$routeProvider resolve参数可以允许向控制器函数注入其他依赖项。 如何将其与显式依赖注入声明相结合?

Ecample:

angular.module('myModule', [])
    .config(function($routeProvider) {
        $routeProvider.
            when('/tabOne', { templateUrl : 'tabOne.html', controller: TabOne, 
                resolve: {
                  someDependency: SomeDependency.factoryFunction
                }
     });

});

然后:

TabOne.$inject = [ '$scope', 'someFirstService', 'someOtherService' ];

如您所见,上面的DI声明会向我的TabOne控制器(someFirstServicesomeOtherService注入两个服务。这两个工作正常,但我希望我的路线只有在someDependency解决并注入TabOne后才能更改。如果我只是将someDependency添加到Controller函数的参数列表中,则会因DI错误而失败。

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:0)

首先,你的控制器是否需要等到依赖关系在被调用之前被解析,或者它是否真的需要SomeDependency.factoryFunction的解析值?

似乎案件就是后者:你想要解决价值。

在这种情况下,一种可行的方法是拥有两个TabOne控制器。

angular.module('myModule', [])
    .config(function($routeProvider) {
        $routeProvider.
            when('/tabOne', { templateUrl : 'tabOne.html', controller: TabOneRouted, 
                resolve: {
                  someDependency: SomeDependency.factoryFunction
                }
     });

});

function TabOne($scope, someFirstService, someOtherService) {
  ... code here ...
}

function TabOneRouted($scope, someFirstService, someOtherService, someDependency) {
    TabOne($scope, someFirstService, someOtherService);
    ... your code dealing with someDependency here ...
  }