variable page globales docs change angular typescript

page - title angular 6



Angular 4/5/6 Variables globales (2)

Realmente me cuesta crear variables globales en mi aplicación Angular 2.

Ya busqué en Google y leí muchas publicaciones en StackOverflow sobre esto durante las últimas 3 horas, sin embargo, parece que simplemente no puedo hacer que funcione. Realmente espero que me puedan ayudar y me disculpo por hacer esta pregunta.

Entonces tengo mi archivo llamado globals.ts , que se ve así:

import { Injectable } from "@angular/core"; @Injectable() export class Globals { var role = ''test''; }

Y quiero usar el rol variable en mi vista HTML de mi componente de esta manera:

{{ role }}

Ya agregué el archivo globals.ts a mi app.module.ts de la siguiente manera:

providers: [ Globals ],

No importa lo que hice en este archivo, simplemente no funcionó. Lo que no quiero hacer es tener que importar el archivo globals.ts en cada componente de forma manual, por eso quiero usar la función de proveedores.

Realmente espero que me puedan ayudar y lo siento de nuevo.

Atentamente,

AE


Puede acceder a la entidad Globals desde cualquier punto de su aplicación a través de la inyección de dependencia angular . Si desea Globals.role valor Globals.role en la plantilla de algún componente, debe inyectar Globals través del constructor del componente como cualquier servicio:

// 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) {} }

Proporcioné Globals en HelloComponent , pero en su lugar podría proporcionarse en algún componente principal HelloComponent''s o incluso en AppModule . No importará hasta que sus Globals solo tengan datos estáticos que no se puedan cambiar (solo constantes). Pero si no es cierto y, por ejemplo, diferentes componentes / servicios pueden cambiar esos datos, entonces los Globals deben ser un singleton . En ese caso, debe proporcionarse en el nivel superior de la jerarquía donde se va a utilizar. Digamos que esto es 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 ] })

Además, es imposible usar var como lo hiciste, debería ser

// globals.ts import { Injectable } from ''@angular/core''; @Injectable() export class Globals { role: string = ''test''; }

Actualizar

Finalmente, creé una demostración simple en stackblitz , donde Globals se comparte entre 3 componentes y uno de ellos puede cambiar el valor de Globals.role .


Yo uso el medio ambiente para eso. Funciona automáticamente y no tiene que crear un nuevo servicio inyectable y lo más útil para mí, no necesita importar a través del constructor.

1) Crea una variable de entorno en tu environment.ts

export const environment = { ... // runtime variables isContentLoading: false, isDeployNeeded: false }

2) Importe environment.ts en el archivo * .ts y cree una variable pública (es decir, "env") para poder usar en la plantilla html

import { environment } from ''environments/environment''; @Component(...) export class TestComponent { ... env = environment; }

3) Úselo en la plantilla ...

<app-spinner *ngIf=''env.isContentLoading''></app-spinner>

en * .ts ...

env.isContentLoading = false

(o simplemente environment.isContentLoading en caso de que no lo necesite para la plantilla)

Puede crear su propio conjunto de globales dentro del entorno. De esta manera:

export const globals = { isContentLoading: false, isDeployNeeded: false }

e importar directamente estas variables (y)