我正在通过使用module.factory()方法来了解角度实际创建工厂的细节。
我发现内部角度使用以下方法,内部仅使用提供程序
function factory(name, factoryFn, enforce)
所以我的问题是关于这个函数的第三个参数enforce
,它实际上是做什么的。
答案 0 :(得分:1)
在幕后创建Angular服务或工厂时,Angular最终会对两者使用相同的功能:
function factory(name, factoryFn, enforce) {
return provider(name, {
$get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
});
}
创建服务时,通常不会发送返回值,并且在幕后调用Object.create()
来创建包含sayHello
方法的对象。
app.service('MyService', function () {
this.sayHello = function () {
console.log('hello');
};
});
但是,在创建工厂时,会返回一个对象文字:
app.factory('MyService', function () {
return {
sayHello: function () {
console.log('hello');
};
}
});
基本上,强制执行用于强制执行返回值。这不仅仅是“这是服务还是工厂?”的问题。因为如果你想要,你仍然可以从服务返回一个对象文字:
app.service('MyService', function () {
return {
sayHello: function () {
console.log('hello');
};
}
});
关于这个问题:“你应该使用哪个?”看看这个:
http://blog.thoughtram.io/angular/2015/07/07/service-vs-factory-once-and-for-all.html