2015-08-22 2 views
0

Прочитав много о различиях между фабрикой и услугами, я думаю, что, наконец, понял, но в большинстве статей говорится, что в 70% случаев я буду использовать фабрику, и это не имеет никакого смысла. Зачем мне нужен сценарий, который для каждого контроллера/директивы есть другой объект той же фабрики.угловая фабрика - пример сценария реальной жизни?

Для начала я создал простой список контактов и службу (не заводскую), содержащую все контакты. Для каждой директивы/контроллера, которые хотят их, я буду вводить эту услугу, и все будут иметь один и тот же экземпляр одной и той же службы, поэтому любое изменение с любого контроллера/директивы все будет иметь самые обновленные контакты, потому что есть только один массив контактов в моей сети.

Можете ли вы показать мне реальный сценарий, который требует внедрения фабрики вместо службы?

+0

фабрика - одноэлементный .... так что нет «другого объекта той же фабрики» – charlietfl

+0

, но я могу передать параметры фабричной функции, чтобы получить некоторую логику до возвращения фабрики. так что же означает «синглтон»? @charlietfl –

+0

да, вы можете, но это зависит от того, какие параметры вы имеете в виду – charlietfl

ответ

0

Вы ошиблись в различии между «фабрикой» и службой.

service() и factory() - это два метода регистрации нового сервиса в угловом модуле. Независимо от того, как вы выбираете, эта услуга всегда будет синглом. Единственное различие заключается в том, как Angular создаст сервис.

Если вы используете

app.service('foo', function() { ... }); 

угловой будет ожидать, что функция вы передаете функция конструктора. Он будет использовать new для вызова функции конструктора, и эта функция будет инициализировать службу «Foo» таким образом:

this.someMethod = ...; 
this.somOtherMethod = ...; 

this, в этом случае, является foo обслуживание.

Если вы используете

app.factory('foo', function() { ... }); 

угловым будет ожидать функция вы передаете функцию завода. То есть роль этой функции равна объект, который является услугой foo. Эта функция будет, таким образом, сделать что-то вроде

var service = {}; 
service.someMethod = ...; 
service.someOtherMethod = ...; 
return service; 

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