为什么这会给我一个错误:
angular.module('app')
.config(function($routeProvider, $locationProvider, $httpProvider, $location) {
未捕获错误:未知提供商:来自应用的$ location
但是这条线路没有?
angular.module("app")
.factory("SomeResource",
function($q, $resource, $http, $location, AuthenticationService, Base64) {
这是相同的应用程序。 config
只能获得提供商而factory
只能获得非提供商吗?
答案 0 :(得分:30)
只有提供程序和常量可以注入配置块。
来自配置块上的angularjs documentation
配置块 - 在提供程序注册和配置阶段执行。只有提供程序和常量才能注入配置块。这是为了防止服务在完全配置之前意外实例化
- 醇>
运行块 - 在创建注入器后执行并用于启动应用程序。只有实例和常量才能注入运行块。这是为了防止在应用程序运行时进一步进行系统配置。
本质上,配置块是在将提供者注入控制器,服务,工厂等之前配置提供者的地方。
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
(以及service
,controller
和directive
)是您的应用程序的一部分。因此,它们也只能接受实例(或单例)和常量。