Мне очень сложно создавать глобальные переменные в моем приложении Angular 2.
Я уже гуглил и читал много сообщений на StackOverflow по этому поводу за последние 3 часа, однако мне кажется, что я просто не могу заставить его работать. Я очень надеюсь, что вы можете мне помочь, и прошу прощения за этот вопрос.
Итак, у меня есть файл globals.ts , который выглядит так:
import { Injectable } from "@angular/core";
@Injectable()
export class Globals {
var role = 'test';
}
И я хочу использовать переменную роль в моем HTML-представлении моего компонента следующим образом:
{{ role }}
Я уже добавил файл globals.ts в свой app.module.ts следующим образом:
providers: [
Globals
],
Что бы я ни делал с этим файлом, он просто не работал. Чего я не хочу делать, так это импортировать файл globals.ts в каждый компонент вручную, поэтому я хочу использовать функцию поставщиков.
Я очень надеюсь, что вы сможете мне помочь, и еще раз извиняюсь.
С уважением,
AE
export class Globals { var role = 'test'; }
<- что это?localStorage
?Ответы:
Вы можете получить доступ к
Globals
объекту из любой точки вашего приложения с помощью внедрения зависимостей Angular . Если вы хотите вывестиGlobals.role
значение в шаблоне какого-либо компонента, вы должны внедрить егоGlobals
через конструктор компонента, как любой сервис:Я предоставил
Globals
вHelloComponent
, но вместо этого он может быть предоставлен в каком-либоHelloComponent's
родительском компоненте или даже вAppModule
. Это не имеет значения, пока у васGlobals
не будут только статические данные, которые нельзя изменить (скажем, только константы). Но если это не так, и, например, разные компоненты / службы могут захотеть изменить эти данные, тогда ониGlobals
должны быть одноэлементными . В этом случае он должен быть предоставлен на самом верхнем уровне иерархии, где он будет использоваться. Допустим, этоAppModule
:Кроме того, нельзя использовать var так, как вы это делали, это должно быть
Обновить
Наконец, я создал простую демонстрацию на stackblitz , где single
Globals
используется тремя компонентами, и один из них может изменять значениеGlobals.role
.источник
Я использую для этого среду. Он работает автоматически, и вам не нужно создавать новую услугу для инъекций, и, что наиболее полезно для меня, не нужно импортировать через конструктор.
1) Создайте переменную окружения в вашем environment.ts
2) Импортируйте environment.ts в файл * .ts и создайте общедоступную переменную (например, "env"), чтобы ее можно было использовать в шаблоне html.
3) Используйте его в шаблоне ...
в * .ts ...
(или просто environment.isContentLoading, если он вам не нужен для шаблона)
Вы можете создать свой собственный набор глобальных объектов в environment.ts следующим образом:
и напрямую импортировать эти переменные (y)
источник
environments/environment.ts
иenvironments/environment.prod.ts
которые заменяются автоматически.Не рекомендуется, но другие ответы не являются глобальными переменными. Для действительно глобальной переменной вы можете это сделать.
Index.html
Компонент или что-то еще в Angular
..вверху справа после импорта:
...потом:
источник
Вы можете использовать объект Window и получать к нему доступ в любом месте. пример window.defaultTitle = "мой заголовок"; тогда вы можете получить доступ к window.defaultTitle, ничего не импортируя.
источник