Angular 2 - Каков наилучший способ хранения глобальных переменных, таких как токен аутентификации, чтобы все классы имели к ним доступ?
Angular 2 только вопрос:
Каков наилучший способ хранения глобальных переменных, таких как токен аутентификации или базовый url (настройки среды), чтобы все классы могли иметь к ним доступ, не теряя их при обновлении?
Поэтому, когда я вхожу в систему, я дам пользователю токен аутентификации и обычно сохраняю его в $kerncope для angular 1.x.
Ответы
Ответ 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, поскольку обновление страницы приведет к тому, что вы потеряете значение токена, сохраненное в памяти.