Eu realmente tenho dificuldade em criar variáveis globais em meu aplicativo Angular 2.
Eu já pesquisei e li muitos posts no StackOverflow sobre isso nas últimas 3 horas, no entanto, parece que não consigo fazer funcionar. Eu realmente espero que você possa me ajudar e peço desculpas por fazer esta pergunta.
Portanto, tenho meu arquivo chamado globals.ts , que se parece com isto:
import { Injectable } from "@angular/core";
@Injectable()
export class Globals {
var role = 'test';
}
E eu quero usar a função de variável em minha visualização HTML do meu componente assim:
{{ role }}
Já adicionei o arquivo globals.ts ao meu app.module.ts da seguinte maneira:
providers: [
Globals
],
Não importa o que eu fiz neste arquivo, simplesmente não funcionou. O que não quero fazer é importar manualmente o arquivo globals.ts em cada componente, por isso quero usar o recurso de provedores.
Eu realmente espero que você possa me ajudar e sinto muito novamente.
Cumprimentos,
AE
export class Globals { var role = 'test'; }
<- o que é isso?localStorage
?Respostas:
Você pode acessar a
Globals
entidade de qualquer ponto do seu aplicativo por meio de injeção de dependência angular . Se você quiser gerarGlobals.role
valor no modelo de algum componente, deve injetarGlobals
por meio do construtor do componente como qualquer serviço:Eu forneci
Globals
noHelloComponent
, mas em vez disso ele poderia ser fornecido em algumHelloComponent's
componente pai ou até mesmo emAppModule
. Não fará diferença até que vocêGlobals
tenha apenas dados estáticos que não puderam ser alterados (digamos, apenas constantes). Mas se não for verdade e, por exemplo, diferentes componentes / serviços podem querer alterar esses dados, então oGlobals
deve ser um singleton . Nesse caso, deve ser fornecido no nível mais alto da hierarquia onde será usado. Digamos que este sejaAppModule
:Além disso, é impossível usar var da maneira que você fez, deveria ser
Atualizar
Por fim, criei uma demonstração simples no stackblitz , onde o único
Globals
está sendo compartilhado entre 3 componentes e um deles pode alterar o valor deGlobals.role
.fonte
Eu uso o ambiente para isso. Ele funciona automaticamente e você não precisa criar um novo serviço injetável e, o mais útil para mim, não precisa importar via construtor.
1) Crie uma variável de ambiente em seu environment.ts
2) Importe o environment.ts no arquivo * .ts e crie uma variável pública (ou seja, "env") para poder usar no modelo html
3) Use-o no modelo ...
em * .ts ...
(ou apenas environment.isContentLoading, caso você não precise dele para o modelo)
Você pode criar seu próprio conjunto de globais em environment.ts assim:
e importe diretamente essas variáveis (y)
fonte
environments/environment.ts
eenvironments/environment.prod.ts
que são substituídos automaticamente.Não é realmente recomendado, mas nenhuma das outras respostas são realmente variáveis globais. Para uma variável verdadeiramente global, você poderia fazer isso.
Index.html
Componente ou qualquer outra coisa em Angular
..perto do canto superior direito após as importações:
...mais tarde:
fonte
Você pode usar o objeto Window e acessá-lo em qualquer lugar. exemplo window.defaultTitle = "meu título"; então você pode acessar window.defaultTitle sem importar nada.
fonte