Угловые 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)