Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 什么';工厂和服务的区别是什么?_Angularjs - Fatal编程技术网

Angularjs 什么';工厂和服务的区别是什么?

Angularjs 什么';工厂和服务的区别是什么?,angularjs,Angularjs,我正在尝试与角工厂和服务。有人能告诉我这两者的区别吗 factory是否总是返回一个单例,但服务是一个实例?众所周知,我们可以定义如下服务: app.service('MyService', function () { this.sayHello = function () { console.log('hello'); }; }); app.controller('AppController', function (MyService) { MyService.sayHe

我正在尝试与角工厂和服务。有人能告诉我这两者的区别吗


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

众所周知,我们可以定义如下服务:

app.service('MyService', function () {
  this.sayHello = function () {
    console.log('hello');
  };
});
app.controller('AppController', function (MyService) {
  MyService.sayHello(); // logs 'hello'
});
.service()
是我们模块上的一个方法,它采用一个名称和一个定义服务的函数。非常直截了当。定义后,我们可以在其他组件(如控制器、指令和过滤器)中注入并使用该特定服务,如下所示:

app.service('MyService', function () {
  this.sayHello = function () {
    console.log('hello');
  };
});
app.controller('AppController', function (MyService) {
  MyService.sayHello(); // logs 'hello'
});
现在和工厂一样:

app.factory('MyService', function () {
  return {
    sayHello: function () {
      console.log('hello');
    };
  }
});
同样,
.factory()
是我们模块上的一个方法,它还包含一个名称和一个函数,用于定义工厂。我们可以注入和使用这个东西,就像我们使用这个服务一样

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

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

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

他们都是单身人士

还要记住,在这两种情况下,angular都有助于您管理单身。无论您将服务或函数注入到何处或注入多少次,您都将获得对同一对象或函数的相同引用

来源:

谷歌是你的朋友!