2013-05-02 8 views
9

В чем разница между реализацией функции $ rootScope и сервиса? Меры безопасности или производительности.

Я прочитал this, поэтому мне интересно.

Я пытался выяснить, будет ли некоторая глобальная функция для моего приложения лучше всего реализована в службе или на самом корневом компьютере. Чтобы передать вам ребята с идеей о том, что я делаю, я в настоящее время разрабатываю функцию грязной формы, в которой он запрашивает пользователя, если он или она перемещается от определенной формы. В этом случае я решил лучше всего реализовать его как глобальную функцию, поэтому любые подсказки?

Спасибо за ответы,

Jan

+0

См. Http://stackoverflow.com/a/35411623/2893073 – Eddy

ответ

8

В этом случае я бы пойти на службу, чтобы избежать глобального состояния. все новые области создаются из $ rootScope. Новые контроллеры или те, кто использует область действия, будут иметь значения $rootscope. Например, если вы определяете $rootScope.validate(), а в контроллере вы определяете функцию $scope.validate(), потому что вы забываете о первом определении, что-то обязательно пойдет не так.

Существует статья Misko H. об этом http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/

Услуг instantianted по требованию, в то время как $ rootScope создается во время начальной загрузки, и могут быть введены там, где это необходимо. Это хорошо для проверки.

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

(http://docs.angularjs.org/guide/dev_guide.services.creating_services)

3

В @egamonal упомянутых услуг являются более надежным способом обмениваться общей функциональность. По требованию создаются не только сервисы, они одноточечные по своей природе, поэтому после создания службы один и тот же экземпляр передается по AngularJS по запросу. Поэтому, если что-то может идти в корневой области, оно также может быть реализовано с помощью службы.

Следует помнить, что использование такого глобального подхода - это возможность утечки памяти. Экземпляр классов JS или, возможно, DOM-элементов остается в памяти, потому что вы ссылались на них из ваших глобальных функций (либо в $ rootcope, либо в сервисе).

+0

Что мне нравится в rootScope, что мне не нужно возиться с обещаниями. Если у меня есть приложение-пользователь, я могу оставить край в $ rootScope.appUser, и если будет изменено имя $ rootScope.appUser.firstName, мне не нужно подписываться или выпускать события, я могу просто указать имя Firs: {{appUser.firstName}} в любой вид. Я что-то пропустил? – Toolkit

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