为什么我不能在我的config()中注入$ location?

时间:2013-08-08 23:01:10

标签: angularjs

为什么这会给我一个错误:

angular.module('app')
       .config(function($routeProvider, $locationProvider, $httpProvider, $location) {
  

未捕获错误:未知提供商:来自应用的$ location

但是这条线路没有?

angular.module("app")
       .factory("SomeResource", 
               function($q, $resource, $http, $location, AuthenticationService, Base64) {

这是相同的应用程序。 config只能获得提供商而factory只能获得非提供商吗?

2 个答案:

答案 0 :(得分:30)

只有提供程序和常量可以注入配置块。

  

来自配置块上的angularjs documentation

     
      
  1. 配置块 - 在提供程序注册和配置阶段执行。只有提供程序和常量才能注入配置块。这是为了防止服务在完全配置之前意外实例化

  2.   
  3. 运行块 - 在创建注入器后执行并用于启动应用程序。只有实例和常量才能注入运行块。这是为了防止在应用程序运行时进一步进行系统配置。

  4.   

本质上,配置块是在将提供者注入控制器,服务,工厂等之前配置提供者的地方。

angular.module('myModule', []).
 config(function(injectables) { // provider-injector
   // This is an example of config block.
   // You can have as many of these as you want.
   // You can only inject Providers (not instances)
   // into the config blocks.
 }).
 run(function(injectables) { // instance-injector
   // This is an example of a run block.
   // You can have as many of these as you want.
   // You can only inject instances (not Providers)
   // into the run blocks
 });

答案 1 :(得分:7)

有两种模块级方法可以注入代码:

1)config。此方法将在创建注入器之前运行,并且仅接受用于注入的提供者和常量

2)run。此方法将在应用程序初始化阶段运行,并仅接受实例和常量(例如$location)。

factory(以及servicecontrollerdirective)是您的应用程序的一部分。因此,它们也只能接受实例(或单例)和常量。