我正在尝试使用Angular工厂和服务。谁能告诉我这两者之间的区别?
工厂是否总是返回单例,但是为实例提供服务?
答案 0 :(得分:0)
众所周知,我们可以定义这样的服务:
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 + "!";
}
}
});
他们都是单身人士
另请注意,在这两种情况下,棱角都可以帮助您管理单身人士。无论您注入服务或功能的位置或次数,您都将获得对同一对象或功能的相同引用。