当你有一个工厂有4个相关的方法,每个方法都很长(200多行代码),并且你想避免有800多行代码的大文件时,最好的做法是什么?
一种解决方案是在同一模块下创建4个工厂,每个工厂在自己的文件中公开一个方法。然后将它们全部注入需要它们的控制器中。
有更好的解决方案吗?我想创建一次Factory,然后向它添加方法,就像我使用模块模式进行模块扩充一样。然后我只需要注入一次Factory,并使其所有方法都可用。
我想创建一次Factory,然后向它添加方法,就像我使用模块模式进行模块扩充一样。然后我只需要注入一次Factory,并使其所有方法都可用。
是的,这会起作用:
// In your main module file.
angular.module('myModule', []);
// file1.js
angular.module('myModule').factory('BigService1', function(){
// Your actual implementation here.
console.log('I am BigService1');
});
// file2.js
angular.module('myModule').factory('BigService2', function(){
// Your actual implementation here.
console.log('I am BigService2');
});
// ... additional files
// Separate file/service to aggregate your big factory services.
angular.module('myModule').service('AggregateService', [
// Add dependencies
'BigService1','BigService2',
function(BigService1, BigService2){
// Return an object that exposes the factory interfaces.
return {
service1: BigService1,
service2: BigService2
};
}]);
您也可以将代码安排为旧的vanilla-js风格,然后访问服务中的库,如下所示:
var Mirko = { };
Mirko.FunService = {
getAllSomething : function (p1, p2) {
},
...
};
angular.module('myModule').factory('BigService', function(){
return {
methodOne : Mirko.getAllSomething,
...
};
});
你最终会得到一个对象Mirko,你可以在angular应用程序的范围之外访问它,但它与你想在应用程序中使用的其他外部api(不是为angular编写的)没有任何不同。你处理自己的"外部"api的方式可以用老式的方式,每个"类"一个文件,例如"FunService"。
这可能不是最漂亮的解决方案,但它将是一个简单的抽象。
只是说。。。
也许可以通过其他工厂分割您的方法,这些工厂可以注入您的"主"工厂:
// file 1
angular.module('foo').factory('segment1', function () {
return {
method: function () {
// ... super long method
}
};
});
// file 2
angular.module('foo').factory('segment2', function () {
return {
method: function () {
// ... super long method
}
};
});
// your main factory file
angular.module('foo').factory('myFactory', function (segment1, segment2) {
return {
method1: segment1.method,
method2: segment2.method
};
}