Подтвердить что ты не робот

Angular 2 - Каков наилучший способ хранения глобальных переменных, таких как токен аутентификации, чтобы все классы имели к ним доступ?

Angular 2 только вопрос:

Каков наилучший способ хранения глобальных переменных, таких как токен аутентификации или базовый url (настройки среды), чтобы все классы могли иметь к ним доступ, не теряя их при обновлении?

Поэтому, когда я вхожу в систему, я дам пользователю токен аутентификации и обычно сохраняю его в $kerncope для angular 1.x.

4b9b3361

Ответ 1

Чтобы создать действительно глобальные данные области, вы должны зарегистрировать свой класс\object\значение во время начальной загрузки приложения в качестве параметра зависимости в функцию начальной загрузки

bootstrap(MyApp,[MyGlobalService]);

Это зарегистрирует вашу службу MyGlobalService (на самом деле это может быть объект или функция factory или ваш собственный провайдер) на корневом уровне. Эта зависимость теперь может быть введена в любой компонент.

В отличие от Angular1 существует несколько инжекторов, доступных для приложения Angular2, с взаимно однозначным отображением между компонентами и инжекторами. Каждый компонент имеет свой собственный инжектор.

В руководстве разработчика Angular есть хороший пример таких регистраций. См. Руководство по Инъекция зависимостей.

Другой вариант уже выделен @Yaniv.

Ответ 2

На мой взгляд, сохранение такого параметра, как глобальная переменная типа $rootScope, считается плохой практикой. В Angular 1.x вы должны использовать службу (singelton), чтобы получать эти данные со всех сторон. Таким образом, ваши данные будут доступны повсюду - вы можете ввести свой сервис и получить стоимость. Вы также можете издеваться над этим сервисом при тестировании модулей.

Angular 2 приложения должны быть построены как дерево . Я думаю, что лучшим решением для вашего сценария будет сохранение его с помощью службы под корневым компонентом и передача ее дочерним компонентам в качестве ввода.

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

Если вы все еще хотите сделать это "Angular 1.x way", я предполагаю, что вы можете внедрить эту службу повсюду и использовать ее значения. Это менее предпочтительные варианты, но лучше глобальных переменных!

Надеюсь, что это было полезно.

Ответ 3

В вашем конкретном сценарии вы действительно хотите сохранить токен в localstorage, поскольку обновление страницы приведет к тому, что вы потеряете значение токена, сохраненное в памяти.