我怎么知道我可以注入控制器的依赖项?

时间:2015-03-27 04:45:15

标签: javascript angularjs dependency-injection angularjs-controller angularjs-provider

我正在尝试在我的控制器中使用$routeProvider依赖项:

.controller('mainController', function($scope, $state, $routeProvider) {

但我收到错误:

Error: [$injector:unpr] Unknown provider: $routeProviderProvider <- $routeProvider

我怎么知道我可以注入任何给定控制器的依赖项?

2 个答案:

答案 0 :(得分:2)

您只能访问控制器中的服务而非访问者,因此请在此处使用$route

因此您收到错误 $ routeProviderProvider 因为它正在寻找$routeProvider的提供商,$route本身就是{{1}}的提供商。

Docs

答案 1 :(得分:2)

角度内有两个阶段

  1. 配置阶段(这里我们使用app.config编写代码)
  2. 运行阶段(我们使用app.run的地方,在运行循环后,所有其他指令都使用编译循环执行)
  3. 提供商只是服务/工厂,但最重要的是它可以在配置阶段内访问。

    示例

    假设我们有以下提供者

    myApp.provider('unicornLauncher', function UnicornLauncherProvider() {
        var useTinfoilShielding = false;
    
        this.useTinfoilShielding = function(value) {
            useTinfoilShielding = !!value;
        };
    
        this.$get = ["apiToken", function unicornLauncherFactory(apiToken) {
            return new UnicornLauncher(apiToken, useTinfoilShielding);
        }];
    });
    

    在将其注入配置内容时,您应始终将其Provider添加为unicornLauncherProvider

    前缀

    在控制器中使用它时,您可以将其用作unicornLauncher

    注意:

      始终可以在.config内访问

    提供商配置)   在其名称中带有后缀Provider的阶段,而在控制器内部,您可以&gt;使用unicornLauncher(直接提供者名称)

    直接注入它      

    服务/工厂它们在角度

    的配置阶段中不可见

    仍然混淆然后请参考this link