angular.js - angular跨文件注入服务
PHP中文网
PHP中文网 2017-05-15 16:56:45
[AngularJS讨论组]

假设在 a.js 定义了 service A,b.js 定义了一个 controller B,如何在B中注入服务A

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
淡淡烟草味

angular跨文件注入服务?
看你这个问题,我觉得题主是概念不清楚,应该明白以下基本概念。
1. 你所写的angular代码的组织结构不是以文件来划分的。
2. angular已经抽象成了controller,service,directive等组件。这些东西你可以分成多个文件写,也可以全写在一个文件中,想让你的代码生效,只要在html中加载。为了程序可读性好,我们一般规定一个组件定义时单独放一个文件,并遵循良好的目录结构。
3. 代码划分是靠模块来做的。比如你用bower安装了某个包,你需要在定义你的module时,写入依赖模块,那么这个被依赖模块中定义的组件就有效。这一点谈论的是模块级别的。
4. 何为注入服务?虽然你加载了某个模块,它内部的代码都加载了。但是每个controller依赖哪些服务,angular要如何去找,你还要告诉angular,这时候就需要依赖注入了。这一点谈论的是controller级别的。

综上所述,你就这样 controllerX.$inject = ['serviceX']; 直接最普通的方式加载就行了。
如果没有生效,那应该是以下原因:
1. 没有引入js文件。
2. 没有加载这个service所在的模块。angular.module('MyApp',['ModuleX'])就行了。
3. 但要注意此处你自己的模块MyApp使用可以多次,但是定义依赖只能一次,否则前后引用的就不是一个模块了。
即你可以

angular.module('MyApp',['ModuleX'])
    . controller('ControllerA', ControllerA);
angular.module('MyApp')
    . controller('ControllerB', ControllerB);

但一定不可以

angular.module('MyApp',['ModuleX'])
    . controller('ControllerA', ControllerA);
angular.module('MyApp',['ModuleX'])
    . controller('ControllerB', ControllerB);

检查下这3点,如果还是不行再继续贴代码讨论吧。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号