我正在学习AngularJS,这是一个受ng-boilerplate启发的组织。我为我网站的不同部分创建了不同的Angular模块。
但是,我想在主模块下创建所有公共元素(服务和指令),同时将它们全部放在不同的源文件中。
此代码有效,但是sessionService.js中的模块引用了与app.js相同的模块,还是创建了一个具有相同名称的新模块?
app.js
var app = angular.module('myApp', [...])
.config(...)
.controller(...);
sessionService.js
angular.module('myApp', [])
.service('SessionService', function() { ... });
答案 0 :(得分:32)
如果您在同一页面上多次致电angular.module('myApp', [])
,则可能会遇到错误或冲突。我从未尝试过。
但是,如果您已经运行angular.module('myApp', [])
一次。然后,您可以运行angular.module('myApp')
(注意:没有[]
)来检索(参考)您之前定义的myApp
模块。
答案 1 :(得分:5)
在controller.js文件中:
var app = angular.module('myApp',['newService']);
在service.js中:
angular.module('newService',[])
.service('someService',function(){
return {
// return something
return null
}
}
});
不要忘记在HTML中包含两个js文件:
<script src="controllers/controller.js" type="text/javascript"></script>
<script src="services/service.js" type="text/javascript"></script>
答案 2 :(得分:3)
命名&amp;命名空间在任何项目中都很重要。尝试:
app.js:
var app = angular.module('myApp', ['sessionService', ...])...;
sessionService.js:
angular.module('sessionService', [])
.service('SessionService', ...);
请注意,模块名称是较低的驼峰情况,而服务对象本身是较高的驼峰情况。这有助于避免命名空间冲突。希望有所帮助。