2014-12-10 2 views
22

Я прочитал пару сообщений, касающихся правильного использования объектов angularjs: сервисов, заводов, контроллеров и директив.AngularJS: controller vs service

Моя особая забота - это сравнение контроллера и службы. Ни одна из сообщений, хотя мне не говорила, что контроллер может делать то, что не может обслуживать, и наоборот.

Может ли это быть перечисленным или это просто вопрос канонического использования углов?

+3

Прошу прощения, но интернет полна этих сравнений. http://kirkbushell.me/when-to-use-directives-controllers-or-services-in-angular/ –

+3

@JasonvanderZeeuw To быть справедливым, это первый результат, который я нашел, когда я его искал. Поэтому ОП сделал мне услугу, спросив. – dwjohnston

+1

@JasonvanderZeeuw Не можете ли вы просто передать ссылку тихо? –

ответ

51

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

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

+3

Итак, ключевым словом является ** постоянство ** ... Спасибо. – user776686

+0

Я бы сказал, настойчивость и возможность ссылаться на функции и переменные из представления с помощью метода ng-controller = «MyController as ctrl» –

+1

Другой набор ключевых слов: ** общий код/​​данные **. Помимо персистентности, важной особенностью службы является то, что ее код может быть легко разделен между несколькими контроллерами/директивами/компонентами и т. Д.Например, в приложении, которое я сейчас создаю, у меня есть служба для моего частного REST API - эта служба может быть введена и использована в любом месте. Попытка сделать то же самое с контроллером будет излишне сложной. – rinogo

8

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

услуги - обязанности: предоставляет бизнес-услуги, что является не зависит от вида или контроллера. Его основной задачей является предоставление услуг независимо от потребителя (контроллер/просмотр/другие услуги).

Я не убежден, что факторы стойкости в различиях.

8

Согласно документации AngularJS, https://docs.angularjs.org/guide/concepts

Контроллеры должны делать с видом связанных бизнес-логики. Услуги, с другой стороны, связаны с многоразовой бизнес-логикой, независимой от представлений.

0

В дополнение к тому, что было сказано выше. Контроллеры могут также придерживаться логики вашего приложения, пока приложение не так велико. Но по мере роста вашего приложения вам потребуется переместить логику для использования сервисов (например, фабрики). Это позволит легко доступным переменным и функциям, необходимым для вашего приложения.

Смежные вопросы