大佬教程收集整理的这篇文章主要介绍了angularjs – Angular JS:为什么module.config注入和控制器注入之间的区别?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
为了展示它,我向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(); });
但是当我们将它注入控制器时(注意无提供者名称),只会暴露$get返回值:
function MyCtrl1(myservicE) { console.log('MyCtrl1.myservice =',myservice,myservice.Name); } MyCtrl1.$inject = ['myservice'];
控制台输出如下:
我的服务@H_850_14@myserviceProvider:
构造函数{providerMethod:function,$get:function}
它是我的service.providerMethod@H_850_14@myCtrl1.myservice = Object {name:“stam”} stam
任何人都可以解释这个区别吗?原因?
非常感谢任何想法
利奥尔
PS:我在angular-ui new ui-router(优秀项目!)中看到了这种技术.我需要访问外部提供者类来在茉莉花和其他地方进行注射 – 无济于事
[module] .config()在提供程序注册和配置期间运行,因此您可以更改访问提供程序并对其进行操作.这是一个配置事物的地方,因此得名.
从文档(http://docs.angularjs.org/guide/module):
另一方面,控制器是在配置了AFTER服务后实例化的,所以你不应该再混淆供应商了.一切都已经配置好了.你现在准备好了他们的产品.在这个阶段,注入器不能再注入提供者,只是它们创建的实例(服务).
@H_844_9@mymodule.service('myservice',function() { // this is your service constructor });
然后你可以在配置函数中访问它的提供者myserviceProvider …
@H_844_9@mymodule.config(function(myserviceProvider) { // to stuff with your provider here });
但是当控制器被实例化时,你应该要求服务,而不是他们的提供者,所以这不会起作用……
@H_844_9@mymodule.controller(function(myserviceProvider) { ... });
这样会很好……
以上是大佬教程为你收集整理的angularjs – Angular JS:为什么module.config注入和控制器注入之间的区别?全部内容,希望文章能够帮你解决angularjs – Angular JS:为什么module.config注入和控制器注入之间的区别?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。