AngularJS:不同文件中的服务

时间:2013-12-29 00:28:13

标签: angularjs

我正在学习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() { ... });

3 个答案:

答案 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', ...);

请注意,模块名称是较低的驼峰情况,而服务对象本身是较高的驼峰情况。这有助于避免命名空间冲突。希望有所帮助。