懒惰地实例化&& AngularJS中的单身人士?

时间:2017-02-19 04:57:15

标签: javascript angularjs service

AngularJS 文档中,我读到AngularJS服务是:

  

Lazily实例化 - 当应用程序组件依赖它时,AngularJS仅实例化服务。

     

单身人士 - 依赖于服务的每个组件都会获得对服务工厂生成的单个实例的引用。

这些概念究竟是什么?我对这些主题没有任何直觉。

1 个答案:

答案 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代替。