【问题标题】:what's the difference between factory and service? [duplicate]工厂和服务有什么区别? [复制]
【发布时间】:2016-04-13 20:33:23
【问题描述】:

我正在尝试使用 Angular 工厂和服务。谁能告诉我这两者的区别?

工厂是否总是返回一个单例,但服务一个实例?

【问题讨论】:

标签: angularjs


【解决方案1】:

众所周知,我们可以这样定义一个服务:

app.service('MyService', function () {
  this.sayHello = function () {
    console.log('hello');
  };
});

.service() 是我们模块上的一个方法,它接受一个名称和一个定义服务的函数。很直接。一旦定义好,我们就可以在其他组件中注入和使用该特定服务,例如控制器、指令和过滤器,如下所示:

app.controller('AppController', function (MyService) {
  MyService.sayHello(); // logs 'hello'
});

现在和工厂一样:

app.factory('MyService', function () {
  return {
    sayHello: function () {
      console.log('hello');
    };
  }
});

同样,.factory() 是我们模块上的一个方法,它还带有一个名称和一个定义工厂的函数。我们可以像使用服务一样注入和使用那个东西。

我们可以看到服务是构造函数,而工厂不是。在这个 Angular 世界的深处,有一段代码在实例化时使用服务构造函数调用 Object.create()。但是,工厂函数实际上只是一个被调用的函数,这就是我们必须显式返回一个对象的原因。

无论我们使用什么,service()factory(),它始终是一个被调用的工厂,它为我们的服务创建一个提供者。

基本上服务和工厂的区别如下:

app.service('myService', function() {

  // service is just a constructor function
  // that will be called with 'new'

  this.sayHello = function(name) {
     return "Hi " + name + "!";
  };
});

app.factory('myFactory', function() {

  // factory returns an object
  // you can run some code before

  return {
    sayHello : function(name) {
      return "Hi " + name + "!";
    }
  }
});

他们都是单身人士

另外请记住,在这两种情况下,Angular 都可以帮助您管理单例。无论您在何处或多少次注入您的服务或函数,您都将获得对同一对象或函数的相同引用。

来源:service vs factory

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2017-07-10
    • 2012-03-23
    • 1970-01-01
    • 2011-04-14
    • 2023-03-08
    相关资源
    最近更新 更多