Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angularjs – Angular JS:为什么module.config注入和控制器注入之间的区别?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我无法从挖掘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();
});

但是当我们将它注入控制器时(注意无提供者名称),只会暴露$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] .service()和[module] .factory()只是[module] .provider()的快捷方式.

[module] .config()在提供程序注册和配置期间运行,因此您可以更改访问提供程序并对其进行操作.这是一个配置事物的地方,因此得名.

从文档(http://docs.angularjs.org/guide/module):

另一方面,控制器是在配置了AFTER服务后实例化的,所以你不应该再混淆供应商了.一切都已经配置好了.你现在准备好了他们的产品.在这个阶段,注入器不能再注入提供者,只是它们创建的实例(服务).

如果您注册服务myservice …

@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) { ... });

这样会很好……

@H_844_9@mymodule.controller(function(myservicE) { ... });

如果您发现自己需要在控制器中进行配置,则应该停下来并重新虑责任的位置.

大佬总结

以上是大佬教程为你收集整理的angularjs – Angular JS:为什么module.config注入和控制器注入之间的区别?全部内容,希望文章能够帮你解决angularjs – Angular JS:为什么module.config注入和控制器注入之间的区别?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。