J'ai vraiment du mal à créer des variables globales dans mon application Angular 2.
J'ai déjà cherché et lu de nombreux articles sur StackOverflow à ce sujet au cours des 3 dernières heures, mais il semble que je ne peux tout simplement pas le faire fonctionner. J'espère vraiment que vous pourrez m'aider et je m'excuse d'avoir posé cette question.
J'ai donc mon fichier appelé globals.ts , qui ressemble à ceci:
import { Injectable } from "@angular/core";
@Injectable()
export class Globals {
var role = 'test';
}
Et je veux utiliser le rôle de variable dans ma vue HTML de mon composant comme ceci:
{{ role }}
J'ai déjà ajouté le fichier globals.ts à mon app.module.ts de la manière suivante:
providers: [
Globals
],
Peu importe ce que j'ai fait sur ce fichier, cela n'a tout simplement pas fonctionné. Ce que je ne veux pas faire, c'est avoir à importer manuellement le fichier globals.ts dans chaque composant, c'est pourquoi je souhaite utiliser la fonctionnalité des fournisseurs.
J'espère vraiment que vous pourrez m'aider et désolé à nouveau.
Meilleures salutations,
AE
export class Globals { var role = 'test'; }
<- qu'est-ce que c'est?localStorage
?Réponses:
Vous pouvez accéder à l'
Globals
entité à partir de n'importe quel point de votre application via l' injection de dépendances angulaires . Si vous souhaitez générer uneGlobals.role
valeur dans le modèle d'un composant, vous devez injecterGlobals
via le constructeur du composant comme n'importe quel service:J'ai fourni
Globals
dans leHelloComponent
, mais à la place, il pourrait être fourni dans unHelloComponent's
composant parent ou même dansAppModule
. Cela n'aura pas d'importance tant que vous ne disposerez pas deGlobals
données statiques qui ne pourraient pas être modifiées (par exemple, des constantes uniquement). Mais si ce n'est pas vrai et que, par exemple, différents composants / services peuvent vouloir modifier ces données, alors leGlobals
doit être un singleton . Dans ce cas, il doit être fourni au niveau le plus élevé de la hiérarchie où il va être utilisé. Disons que c'estAppModule
:De plus, il est impossible d'utiliser var comme vous l'avez fait, cela devrait être
Mettre à jour
Enfin, j'ai créé une démo simple sur stackblitz , où single
Globals
est partagé entre 3 composants et l'un d'eux peut changer la valeur deGlobals.role
.la source
J'utilise l'environnement pour cela. Cela fonctionne automatiquement et vous n'avez pas à créer de nouveau service injectable et le plus utile pour moi, vous n'avez pas besoin d'importer via le constructeur.
1) Créez une variable d'environnement dans votre environnement .ts
2) Importez environment.ts dans le fichier * .ts et créez une variable publique (c'est-à-dire "env") pour pouvoir l'utiliser dans un modèle html
3) Utilisez-le dans le modèle ...
dans * .ts ...
(ou simplement environment.isContentLoading au cas où vous n'en auriez pas besoin pour le modèle)
Vous pouvez créer votre propre ensemble de globals dans environment.ts comme ceci:
et importez directement ces variables (y)
la source
environments/environment.ts
etenvironments/environment.prod.ts
qui sont remplacés automatiquement.Pas vraiment recommandé mais aucune des autres réponses n'est vraiment des variables globales. Pour une variable vraiment globale, vous pouvez le faire.
Index.html
Composant ou autre chose dans Angular
..en haut à droite après les importations:
...plus tard:
la source
Vous pouvez utiliser l'objet Window et y accéder partout. exemple window.defaultTitle = "mon titre"; alors vous pouvez accéder à window.defaultTitle sans rien importer.
la source