1

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

此代码my value在 console.log 中使用service

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(),其余代码相同,它my value在 console.log 中使用factory

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>

4

2 回答 2

2

Todd Motto 的这篇博文值得一千个回答。

使用 .factory() 为我们提供了更多的功能和灵活性,而 .service() 本质上是 .factory() 调用的“最终结果”。.service() 通过在函数上调用 new 为我们提供返回值,这可能会受到限制,而 .factory() 是在此编译过程之前的一步,因为我们可以选择要实现和返回的模式。

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

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

来自 Java,我喜欢.service使用this看起来像一个类的事实。

于 2016-10-27T06:48:45.740 回答
1

让我解释

服务

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

工厂

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

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

例子

*制作一个工厂,如:

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;               
 }]);

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

于 2016-10-27T06:45:59.030 回答