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


ServiceA.js
ServiceB.js
ServiceC.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)

最佳答案

不确定这是否是您需要的,但是您可以执行类似的操作

在专用文件中创建以下内容:

// 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”,并且可以访问所有服务。

07-26 09:14
查看更多