这是我在挖掘 AngularJS 代码时无法弄清楚的,也许你可以帮助解开这个谜团。
为了展示它,我向 AngularJS 种子项目添加了一项服务:
function MyServiceProvider() {
console.log('its my service');
this.providerMethod = providerMethod;
function providerMethod() {
console.log('its my service.providerMethod');
}
this.$get = $get;
function $get() {
var innerInjectable = {
name: 'stam'
};
return innerInjectable;
}
}
var serviceModule = angular.module('myApp.services', []).
value('version', '0.1').
provider('myservice',MyServiceProvider);
您可以看到此提供程序公开了 $get 和某个 'providerMethod'。
现在,对于注入用法:如果我们调用 config,我们可以注入整个类并访问“外部”提供程序方法:
serviceModule.config(function(myserviceProvider) {
console.log('myServiceProvider:',myserviceProvider);
myserviceProvider.providerMethod();
});
但是当我们将它注入控制器时(注意 Provider-less 名称),只有 $get 返回值被暴露:
function MyCtrl1(myservice) {
console.log('MyCtrl1.myservice =',myservice,myservice.name);
}
MyCtrl1.$inject = ['myservice'];
控制台输出如下:它的我的服务 myServiceProvider: Constructor {providerMethod: function, $get: function} 它的我的 service.providerMethod MyCtrl1.myservice = Object {name: "stam"} stam
任何人都可以解释其中的区别吗?原因?非常感谢您的任何想法
里奥
PS:我在 angular-ui new ui-router 中看到了这种技术(优秀的项目!)。我需要访问外部提供程序类才能在茉莉花和其他地方进行注入 - 无济于事