Comment définir des variables globales dans Angulaire 2 dans une manière que je peux les utiliser pour la propriété de liaison dans les modèles?

Dans mon Angulaire 2 (beta 14) application, j'ai besoin de garder une trace de la connexion de l'utilisateur statut afin de masquer/afficher certains éléments.

La question que je reçois est que la propriété de liaison n'est pas sur le même chemin que j'ai fait comme suit.

J'ai créé une classe pour stocker et mettre à jour les variables globales:

app-global.ts

 import {Injectable} from "angular2/core";

 @Injectable() export class AppGlobals {
   //use this property for property binding
   public isUserLoggedIn: boolean = false;

   setLoginStatus(isLoggedIn){
       this.isUserLoggedIn = isLoggedIn;
   }

   getLoginStatus(){
       return this.isUserLoggedIn;
   } }

Dans le composant login-je importer AppGlobals

export class LoginComponent {
    constructor(private _appGlobals: AppGlobals) { }

et connexion de l'etat par

cette._appGlobals.setLoginStatus(true);

Dans un autre composant que j'injecter AppGlobals comme je le fais dans LoginComponent

Je définir une classe (composant), s'de la propriété

isLoggedIn: boolean = ce._appGlobals.isUserLoggedIn; //j'ai aussi essayé en utilisant de la lecture au lieu de la propriété publique (voir ci-dessus)

que j'utilise ensuite dans le composant de modèle pour afficher/masquer un certain élément:

<!-- here I also tried with {{!isLoggedIn}} but results in a syntax error whereas using [(hidden)] instead of [hidden] changes nothing -->
<div id="some-element" [hidden] = "!isLoggedIn">

Enfin, la liaison fonctionne mais il n'y a pas de mise à jour (ce composant est une partie de AppComponent modèle et illustré à chaque page) quand un autre composant (par exemple, LoginComponent) définit le statut de connexion.

MODIFIER j'ai essayé d'appliquer de Gunter réponse mais j'obtiens les erreurs suivantes:

app/app-globals.ts(10,54): error TS2346: Supplied parameters do not match any signature of call target.
app/app-globals.ts(13,29): error TS2339: Property 'emit' does not exist on type 'BehaviorSubject<boolean>'.

Erreur à la ligne 10 provient de [RÉSOLU]

public isUserLoggedIn:BehaviorSubject = new BehaviorSubject().startWith(false);

et c'est apparemment causée par BehaviorSubject attend 1 paramètre

Erreur à la ligne 13 vient de

cette.isUserLoggedIn.émettre(isLoggedIn);

et c'est apparemment à cause d'un non-existant émettent méthode.

Aussi, je ne comprends pas comment doit-je utiliser AppGlobals de sorte que la propriété de la liaison automatique des mises à jour dans un autre composant (voir le dernier exemple avant la modification)

En outre, dans LoginComponent j'ai remplacé isLoggedIn type booléen avec BehaviorSubject parce que isUserLoggedIn a type BehaviorSubject dans AppGlobals

mais

cette._appGlobals.isUserLoggedIn.abonnez-vous(valeur => ce.isLoggedIn = valeur);

renvoie une erreur TypeError:

Attribué expression de type booléen n'est pas assignable à type BehaviorSubject

InformationsquelleAutor dragonmnl | 2016-04-19