Угловые 4/5/6 Глобальные Переменные
Я действительно борюсь с созданием глобальных переменных в моем приложении Angular 2.
Я уже погуглил и прочитал много сообщений на StackOverflow на этом за последние 3 часа, однако кажется, что я просто не могу заставить его работать. Я действительно надеюсь, что вы можете мне помочь, и я прошу прощения за этот вопрос.
Итак, у меня есть мой файл под названием глобалы.ТС, который выглядит так:
import { Injectable } from "@angular/core";
@Injectable()
export class Globals {
var role = 'test';
}
и я хочу использовать переменную роль в моем HTML-представлении моего компонент вроде этого:
{{ role }}
Я уже добавил глобальные.файл ТС в моем приложение.модуль.ТС следующим образом:
providers: [
Globals
],
независимо от того, что я сделал в этом файле, он просто не работал. Чего я не хочу, чтобы импортировать их.ts-файл в каждом компоненте вручную, поэтому я хочу использовать функцию поставщиков.
Я действительно надеюсь, что вы можете помочь мне и извините еще раз.
С уважением,
Е
2 ответа:
вы можете получить доступ к
Globals
сущность из любой точки вашего приложения через инъекция угловой зависимости. Если вы хотите вывестиGlobals.role
значение в шаблоне какого-либо компонента, вы должны ввестиGlobals
через конструктор компонента, как и любой сервис:// hello.component.ts import { Component } from '@angular/core'; import { Globals } from './globals'; @Component({ selector: 'hello', template: 'The global role is {{globals.role}}', providers: [ Globals ] // this depends on situation, see below }) export class HelloComponent { constructor(private globals: Globals) {} }
я предоставил
Globals
наHelloComponent
, но вместо этого может быть предоставлен в некоторыхHelloComponent's
родительский компонент или даже вAppModule
. Это не будет иметь значения, пока вашGlobals
имеет только статические данные, которые не могут быть измененным (только константы). Но если это не так и, например, различные компоненты / службы могут изменить эти данные, тоGlobals
должен быть синглтон. В этом случае он должен быть предоставлен на самом верхнем уровне иерархии, где он будет использоваться. Допустим, этоAppModule
:import { Globals } from './globals' @NgModule({ // ... imports, declarations etc providers: [ // ... other global providers Globals // so do not provide it into another components/services if you want it to be a singleton ] })
кроме того, невозможно использовать ВАР так, как вы сделали, это должно быть
// globals.ts import { Injectable } from '@angular/core'; @Injectable() export class Globals { role: string = 'test'; }
обновление
наконец, Я создал простой демо на stackblitz, где один
Globals
разделяется между 3 компонентами и один из них может изменить значениеGlobals.role
.
я использую для этого все возможности. Он работает автоматически, и вам не нужно создавать новый инъекционный сервис и наиболее полезно для меня, не нужно импортировать через конструктор.
1) Создайте переменную окружения в вашем окружающая среда.ТС
export const environment = { ... // runtime variables isContentLoading: false, isDeployNeeded: false }
2) импорт среде.ТС in *.файл TS и создать общественные переменная (т. е. "env"), чтобы иметь возможность использовать в HTML-шаблоне
import { environment } from 'environments/environment'; @Component(...) export class TestComponent { ... env = environment; }
3) Использовать его в шаблон...
<app-spinner *ngIf='env.isContentLoading'></app-spinner>
in *.ТС ...
env.isContentLoading = false
(или просто окружающей среде.isContentLoading в случае, если вам это не нужно для шаблона)
вы можете создать свой собственный набор глобальных переменных в окружающей среде.ц вот так:
export const globals = { isContentLoading: false, isDeployNeeded: false }
и импортировать непосредственно эти переменные (y)