Angular:为什么我不能把$提供直接注入$get ?
Angular: Why can't I inject $provide directly into $get?
我想这个问题有一个直接的(可能是微不足道的)答案,只是我还没有想清楚。
为什么这样做是我想要的——也就是说,将对$provide
的引用注入到我的服务中:
angular.module('error_reporting', [])
.provider('RaygunLogger', function() {
var provide = undefined;
this.setProvide = function(p){
provide = p;
}
this.$get = function() {
// use $provide in p
};
})
.config(function(RaygunLoggerProvider, $provide) {
RaygunLoggerProvider.setProvide($provide);
});
,而这会产生一个错误的形式Unknown provider: $provideProvider <- $provide <- RaygunLogger <- RaygunLogger
?
angular.module('error_reporting', [])
.provider('RaygunLogger', function() {
this.$get = function($provide) {
// use $provide
};
});
注射器设置前RaygunLogger.$get()
是否运行?我认为这是一个操作顺序问题,在我可以注入$provide
之前,我需要等到模块配置阶段,但我不知道在哪里验证文档。
$provide
仅在配置阶段可用。提供程序的$get
函数在配置阶段之后运行,以创建提供程序提供的东西。
在这一点上,你不能做你想做的。
要在$get
中使用它,您通常使用
var self = this;
而在$get
(factory)定义中使用self
。
如
angular.module('foo',[])
.provider('myFoo', function myFooProviderFn() {
var self = this;
self._debug = false;
self.setDebug = function() { self._debug = true; }
self.$get = ['$location', function($location) {
self.setDebug();
});
});
认为不能在$get
中使用它是错误的。因此,实际的纯提供者实例只能在配置阶段被访问和操作。这种设计背后的基本原理可能是提供者被认为是配置工厂的某种机制。
更多来自文档(Provider recipe)
相关文章:
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以防止img get请求使用css或js发生
- 正在注入包含JS的HTML
- 迷你$provider注入茉莉花和角
- Angularjs工厂注入错误
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- CORS-重定向到第二个GET正在接收的页面
- 如何在Ionic Android中将Javascript注入到web视图中
- jQuery Ajax GET请求工作不正常
- 如何将PHP get查询转换为Meteor's HTTP.get()
- 返回/从Twit's客户端.get
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 如何在router.get()方法中传递url作为参数
- 使用Javascript/JQuery获取JSON GET数据
- Android Webview通过Javascript注入CSS
- 如何使用php文件中的GET来获取我在.js文件中声明的变量
- Get方法获取csv文件的内容
- Meteor:在启动时将html注入客户端文件
- 使用expressjs将post请求中的表单输入注入get请求中
- Angular:为什么我不能把$提供直接注入$get ?