2017-02-19 7 views
1

В AngularJS документации, я прочитал, что AngularJS услуги:Леновый экземпляр && Синглетоны в AngularJS?

Лениво экземпляр - AngularJS конкретизирует только услугу, когда компонент приложения зависит от него.

Singletons - Каждый компонент, зависящий от службы, получает ссылку на единственный экземпляр, созданный фабрикой услуг.

Что это за понятия? У меня нет интуиции об этих предметах.

ответ

2

Lazily instanceulated - 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. Если ни один не использует его, он также не получает экземпляр.

Singletons - Каждый компонент, зависящий от службы, получает ссылку на единственный экземпляр, созданный фабрикой услуг.

Представьте себе, что вы хотите написать службу, которая отправляет аналитику с вашей веб-страницы на сервер. Таким образом, каждый раз, когда вы используете методы обслуживания, вы хотите использовать один и тот же экземпляр вместо создания нового экземпляра отправителя аналитики каждый раз, когда он вводится в любую часть приложения. Об этом говорится в описании. Когда выполняется служебный код, создается один экземпляр и один и тот же экземпляр передается в любую часть приложения, в которое вводится служба.

В то же время, представьте, что у вас есть класс пользователя. Вы хотите создать новый пользовательский экземпляр для каждого пользователя. Вы не хотите, чтобы один и тот же экземпляр использовался для каждого пользователя. В таких случаях служба не полезна. Вместо этого вы использовали бы factory.