angular 中的工厂与服务

factoy vs service in angular

我有一个适用于工厂和服务的代码: 我很困惑在什么情况下我需要使用什么代码。

此代码使用 service

在 console.log 中输出 my value

var mod = angular.module("MyModule", []);

mod.service("myService", function() {
  console.log("this is service");
    return {
      getvalue : function() {
        return "My value";
      }
  };
});

mod.controller("MyController", function(myService) {
  console.log("MyController - myFactory: " + myService.getvalue());
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="MyModule">
<div ng-controller="MyController"></div>
</div>

这段代码我刚刚将 mod.service() 更改为 mod.factory(),其余代码相同,它使用 factory[= 在 console.log 中输出 my value 21=]

var mod = angular.module("MyModule", []);

mod.service("myFactory", function() {
  console.log("this is Factory");
    return {
      getvalue : function() {
        return "My value";
      }
  };
});

mod.controller("MyController", function(myFactory) {
  console.log("MyController - myFactory: " + myFactory.getvalue());
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="MyModule">
<div ng-controller="MyController"></div>
</div>

我来解释一下

服务

服务为我们提供了一种在应用程序的生命周期内保留数据并进行通信的方法 以一致的方式跨控制器。 服务是单例对象,每个应用程序只实例化一次(通过 $injector)并且延迟加载 (仅在必要时创建)。它们提供了一个接口来将这些方法放在一起 与特定功能相关的。

工厂

这个服务工厂函数负责生成一个单一的对象或函数成为 此服务将在应用程序的生命周期内存在。当我们的 Angular 应用加载服务时, service 将执行此函数并保留返回值作为单例服务对象。 服务工厂函数可以是函数也可以是数组,就像我们创建的方式一样 控制器:

所以我希望你为你的核心操作使用工厂,并从一个服务调用这个工厂(你需要为此创建一个单独的服务),这样你就可以提供更多的隔离在您的应用中。

例子

*让一个工厂像:

app.factory('memberServiceFactory', ['$http','$filter', function ($http,$filter) {
    return {
        getData: function (data) {
            return {};
        },           
        addData: function (file, formData) {
        },
    }
}]);

*制作一项服务,例如:

app.service('memberListService', ['memberServiceFactory', function (memberServiceFactory){
        this.getList = memberServiceFactory.getData;
        this.addMember = memberServiceFactory.addData;               
 }]);

你可以看到这里我是从服务中调用工厂,你可以像这样提供封装。

This blog post Todd 的座右铭值得一千个答案。

Using .factory() gives us much more power and flexibility, whereas a .service() is essentially the “end result” of a .factory() call. The .service() gives us the returned value by calling new on the function, which can be limiting, whereas a .factory() is one-step before this compile process as we get to choose which pattern to implement and return.

它解释了源代码级别的区别。

在现实生活中,我认为使用其中一种是个人喜好问题。

来自 Java,我喜欢 .service 使用 this.[=13 看起来像 class =]