Дополнительно
Как объявить глобальную переменную в Angular 2 / Typescript?
Я хочу, чтобы некоторые переменные были доступны везде в Angular 2
на языке Typescript
. Как мне этого добиться?
158
10
Вот простейшее решение без
Service
иObserver
:Поместите глобальные переменные в файл и экспортируйте их.
Чтобы использовать глобальные переменные в другом файле, используйте оператор
импорта
:import * as myGlobals from './globals';
.Пример:
Мне нравится решение от @supercobra. Я просто хотел бы немного улучшить его. Если вы экспортируете объект, который содержит все константы, вы могли бы просто использовать ES6 в импорт модуль без использования требуют.
Я также использовал объект.заморозить, чтобы принять свойства стали истинными константами. Если вас интересует данная тема, вы можете прочитать этот пост.
Смотрите модуль, используя импорт.
Совместная служба - лучший подход
Но вы должны быть очень внимательны при его регистрации, чтобы иметь возможность использовать один экземпляр для всего приложения. Вы должны определить это при регистрации приложения:
но не определять его снова в атрибутах
providers
ваших компонентов:В противном случае для компонента и его подкомпонентов будет создан новый экземпляр вашего сервиса.
Вы можете взглянуть на этот вопрос о том, как работают инъекции зависимостей и иерархические инжекторы в Angular2:
Вы можете заметить, что вы также можете определить
Observable
свойства в сервисе, чтобы уведомлять части вашего приложения, когда ваши глобальные свойства изменяются:Более подробную информацию смотрите в этом вопросе:
См. например https://stackoverflow.com/questions/35993778/angular-2-implementation-of-shared-services
или предоставить отдельные значения
Создать глобальные переменные класса в приложение/глобалы.ц:
В компоненте:
Примечание: Вы можете добавить Глобалс провайдера напрямую к модулю, а не компонент, и вам не нужно будет добавить в качестве поставщиков для каждого компонента в этом модуле.
Имхо для Angular2 (версия V2.2.3) самый лучший способ-добавить услуги, которые содержат в глобальную переменную и ввести их в компоненты без тегов
поставщиков
внутри@компонент
аннотация. Таким образом, Вы сможете обмениваться информацией между компонентами.Образец услуги, что является собственником глобальную переменную:
Образец компонента, обновления значение глобальной переменной:
Образец компонента, читает значение глобальной переменной:
Я не'т знать, лучший способ, но самый простой способ, если вы хотите определить глобальную переменную внутри компонента, чтобы использовать "окно" переменной, в которую записывается так:
окна
.GlobalVariable = "что-нибудь!"
ввы Don'т нужна, чтобы передать его в Bootstrap или импортировать его из других мест, и это доступно в глобальном масштабе для всех JS (не только угловые 2 компонентов).
Что's пути я использую это:
глобальные.ТС
использовать его просто импортировать так:
Я думаю, лучший способ-это разделить объект с глобальными переменными в приложении, экспортируя и импортируя его, где вы хотите.
Сначала создайте новую .ТС файл например глобалс.Ц и объявить объект. Я дал ему объекта тип, но вы также можете использовать любой тип или {}
После этого импортировать его
И использовать его
Мне нравится ответ @supercobra, но я буду использовать ключевое слово const, как в ES6 в уже существующих: