首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多文件角JS中的工厂方法

多文件角JS中的工厂方法
EN

Stack Overflow用户
提问于 2014-09-16 12:16:46
回答 3查看 4.9K关注 0票数 6

如果您有一个拥有类似4种相关方法的工厂,每个方法都很长(200+代码行),并且您希望避免拥有大量的800+代码行,那么最佳实践是什么?

一种解决方案是在同一个模块下创建4个工厂,每个工厂都公开一个方法并在自己的文件中公开。然后将它们全部注入需要它们的控制器中。

有没有更好的解决办法?我想创建工厂一次,然后添加方法,就像我使用模块模式进行模块增强一样。然后,我只需要注入工厂一次,并使它的所有方法可用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-16 12:32:36

您还可以按照旧的vanilla js样式排列代码,然后访问服务中的库,如下所示:

代码语言:javascript
复制
var Mirko = { };

Mirko.FunService = {
  getAllSomething : function (p1, p2) {
  },
  ...
};

angular.module('myModule').factory('BigService', function(){
  return {
    methodOne : Mirko.getAllSomething,
    ...
  };
});

您最终将得到一个对象Mirko,您可以在您的角度应用程序的范围之外访问它,但它与您希望在应用程序中使用的其他外部api(不是为角编写的api)没有任何不同。您处理自己的“外部”api的方式可以采用老式的方式,每个‘类’一个文件。“娱乐服务”。

它可能不是最漂亮的解决方案,但它将是一个简单的抽象。

只是说..。

票数 1
EN

Stack Overflow用户

发布于 2014-09-16 12:27:32

我想创建工厂一次,然后添加方法,就像我使用模块模式进行模块增强一样。然后,我只需要注入工厂一次,并使它的所有方法可用。

是的,这样做是可行的:

代码语言:javascript
复制
// 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
    };
}]);
票数 3
EN

Stack Overflow用户

发布于 2014-09-16 12:27:05

也许可以通过其他工厂分割您的方法,这些工厂可以注入到您的“主”工厂:

代码语言:javascript
复制
// 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
  };
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25868519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档