据说99%的angular的初学者都会有一个疑问:factory
和service
到底有什么区别?什么情况该用factory
,而什么情况又该用service
呢?
比如这个Stackoverflow上的这个问题:Service vs Factory,又或者是这个问题:Service vs Provider vs Factory。
这些问题都有热心答主回答的很棒了,能够解释清它们共同点,区别以及典型用法。因此本文就换个角度,从最根本的角度来看看这两个概念在源代码层次上是如何实现的。
Factory
首先,我们来看看module
上的factory
方法,它是创建一个factory
的入口方法:
factory: invokeLaterAndSetModuleName('$provide', 'factory')
// 对于factory而言就是调用: invokeLaterAndSetModuleName('$provide', 'factory')
function invokeLaterAndSetModuleName(provider, method) {
return function(recipeName, factoryFunction) {
// 在factory函数上设置module名称
if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name;
// 将factory的定义置入任务队列
invokeQueue.push([provider, method, arguments]);
return moduleInstance;
};
}
因此当我们使用该API创建一个factory
时,该factory
的”蓝图”可以表达成下面这个函数:
// 假设我们创建一个名为aFactor