0

在我的项目中,我将角度服务划分为不同的文件,每个文件/服务都应该属于一个名为“ com.mysite.services”的公共模块,例如:

  • 服务A.js
  • 服务B.js
  • 服务C.js

...等等

但是通过以这种方式定义它们:

angular.module('com.mysite.services', []).
    service('ServiceA', function()
    {
    });

我覆盖每个文件的模块。为了解决这个问题,我定义了一个包装函数,如果未定义,它将创建模块,如果定义则返回对它的引用:

function angular_module(name, deps)
{
   var m;
   try
   {
     m = angular.module(name);
   }
   catch (e)
   {
     m = angular.module(name, deps || []);
   }
   return m;
};

所以,我可以简单地替换“。” 声明中带有“_”:

angular_module('com.mysite.services', []).
        service('ServiceA', function()
        {
        });

这解决了我的问题,但我的问题是:有没有办法避免我的包装器支持 Angular-ish 解决方案?(看起来很愚蠢:P)

4

2 回答 2

2

不确定这是你需要的,但你可以做类似的事情

在专用文件中创建:

// Bootstrap.js
angular.module('com.mysite.services', ['com.mysite.services.ServiceA', 'com.mysite.services.ServiceB', ....]);

现在,对于每项服务,您都可以执行类似的操作

// ServiceA.js
angular.module('com.mysite.services.ServiceA', []).
   service('ServiceA', function(){});

//ServiceB.js
angular.module('com.mysite.services.ServiceB', []).
   service('ServiceB', function(){});

您现在可以在您的应用程序中依赖“com.mysite.services”,您的所有服务都将可以访问。

于 2013-09-06T11:42:12.020 回答
0

您可以创建一个 App.js

var myModule = angular.module('com.mysite.services', []);

在 ServiceA.js 中:

myModule.service('ServiceA', function()
    {
    });
于 2013-09-06T11:52:51.677 回答