26

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

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

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

但是这条线没有?

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

这是同一个应用程序。只能config获取提供者,factory只能获取非提供者吗?

4

2 回答 2

30

只有提供者和常量可以注入到配置块中。

来自关于配置块的 angularjs文档

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

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

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

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
 });
于 2013-08-08T23:06:42.687 回答
8

有两种模块级方式注入代码:

1) config。此方法将在创建注入器之前运行,并且只接受提供程序和常量进行注入

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

factory(and service, controller, and directive) 是属于您的应用程序一部分的函数。因此,它们也只能接受实例(或单例)和常量。

于 2013-08-08T23:05:58.750 回答