事实与角色的服务

时间:2016-10-27 06:18:02

标签: angularjs angular-services angular-factory

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

此代码使用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>

2 个答案:

答案 0 :(得分:2)

Todd Motto的

This blog post值得成千上万的答案。

  

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

它解释了源代码级别的差异。

在现实生活中,我认为使用其中一种是一种品味问题。

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

答案 1 :(得分:1)

让我解释一下

服务

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

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

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

实施例

*使一家工厂像:

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

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