在AngularJS 文档中,我读到AngularJS服务是:
Lazily实例化 - 当应用程序组件依赖它时,AngularJS仅实例化服务。
单身人士 - 依赖于服务的每个组件都会获得对服务工厂生成的单个实例的引用。
这些概念究竟是什么?我对这些主题没有任何直觉。
答案 0 :(得分:2)
懒惰地实例化 - 当应用程序组件依赖它时,AngularJS仅实例化服务。
在您的应用程序中,您可能创建了数千/数百个服务。它们在创建时不会被激活。例如,请参阅下面的代码
var app = angular.module('app', [])
app.service('test', function() {
this.xyz = function() {
return one;
};
});
此时,test
服务刚刚定义且未激活。
var app2 = angular.module('app2', ['app'])
app2.service('test2', function(test) {
this.xyz = test.xyz();
});
现在,如果您看到test2
服务取决于test
服务。因此Angular在执行test
服务之前实例化test2
服务。如果test2
未使用test
,则不会对其进行实例化。同样的事情适用于test2
服务。如果没有人使用它,它也不会被实例化。
单身人士 - 依赖于服务的每个组件都会获得对服务工厂生成的单个实例的引用。
想象一下,您想编写一个服务,将分析从您的网页发送到服务器。因此,每次使用服务方法时,您都希望在每次将其注入应用程序的任何部分时使用相同的实例,而不是创建新的分析发送方实例。这就是描述所说的。执行服务代码时,会创建一个实例,并将相同的实例传递给注入服务的应用程序的任何部分。
同样,假设你有User类。您想为每个用户创建新的用户实例。您不希望为每个用户使用相同的实例。在这种情况下,服务无用。您可以使用factory
代替。