2015-07-24 6 views
1

Каков наилучший способ хранения «пользовательского» объекта, доступного для всех контроллеров в угловом приложении?AngularJS: Доступ к объекту с любого контроллера

У меня также есть функция, которая выбирает &.

Вариант 1: $ rootScope

Сначала я просто установка $rootScope.user = myUser. Тогда в каждом контроле я мог бы использовать $ rootScope. Это было прекрасно, пока у меня не было много дублированного кода, так как я должен был проверить, существовал ли он в начале каждого контроллера.

// At the start of each controller 

if (!$rootScope.user) { 
    // fetch and set user 
} 

Вариант 2: Угловой сервис?

Вариант 3: Угловая фабрика?

Ссылки: angular.service vs angular.factory

+0

Отсутствует фундаментальная часть наследования $ scope. Если это на $ rootScope ... $ scope в контроллере уже наследует это свойство [ultra simple demo] (http://plnkr.co/edit/4TfpZzSaACDD2odFCA3s). Другими словами, когда вы вводили его и добавляли в $ scope ... он был уже там и доступен. Я не говорю, что это так, как должно быть сделано ... более просто указывая на это. – charlietfl

+0

Спасибо @charlietfl - Я понимаю эту часть :) Но так как человек может открыть приложение на разных контроллерах, мне всегда нужен чек. –

+1

вернуться к вопросу ... если использование UI-маршрутизатора может добавить решение для абстрактного состояния, которое является родительским для всех состояний, для которых требуется auth. Тогда вам нужно всего лишь проверить место на несколько маршрутов. Просто подключите его к службе Auth – charlietfl

ответ

0

Я хотел бы использовать фабрику по службе, или $ rootScope.

Как указывалось ниже, как служба, так и завод являются одноклеточными.

$ rootScope, как следует из названия, является корнем всех областей применения в угловом приложении.

Вот что-то для справки: http://ilikekillnerds.com/2014/12/angularjs-service-vs-factory/

+0

Это неверно. Завод также возвращает одноэлемент. Службы и фабрики очень похожи, но объявлены с немного другим синтаксисом. –

+0

Вы правы, я случайно поменял их. Исправлено выше. –

+1

По-прежнему неправильно;) служба создает новый экземпляр один раз, но затем возвращает тот же экземпляр. –

0

Если вы создаете SPA и не создавая сферу без родителей, то использовать rootScope он будет работать как шарм.

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