2017-07-13 2 views
0

je connecter avec facebook dans mon service angulaire (LoginService)Comment obtenir le statut de connexion dans la variable

login() { 

    this.fb.login() 
     .then((response: LoginResponse) => this.logResponse = response) 
     .catch((error: any) => console.error(error)); 
} 

Je veux surveiller logResponse variable et dès qu'il change il convient d'examiner si l'utilisateur est connecté, que j'essaie de réaliser de différentes manières. Le dernier utilise ngOnChanges

ngOnChanges(changes: SimpleChanges) { 
    if (this.logResponse.status === 'connected') { 
     this.isConnected(true); 
    } else { 
     this.isConnected(false); 
    } 
} 

mais je suis incapable de changer la valeur de connectionOn qui est responsable de l'état de connexion. Je suivais des variables dans mon service:

private connectionOn = new BehaviorSubject<boolean>(false);  
connectionOn$ = this.connectionOn.asObservable(); 
@Input() logResponse: LoginResponse; 

connectionOn est observable qui est responsable de basculer bouton Connexion/Déconnexion dans login.component.ts, il y a getter et setter de connectionOn mais il ne fonctionne pas dans mon service . Donc, la question principale est de savoir comment changer connectionOn chaque fois que logResponse.status est changé.

Mon code actuel: login.component.ts, login.service.ts

+0

Après avoir reçu la réponse, vous devriez obtenir le corps de la réponse http en utilisant .json(). Je ferais .then ((réponse: LoginResponse) => this.logResponse = response.json()) – ashley

+0

Il montre l'avertissement que la propriété json() n'existe pas sur le type LoginResponse. Mais le problème est de savoir comment obtenir la valeur réelle de 'ogResponse' et si nécessaire, basculer le' connectionOn' immédiatement. Merci @ashley –

+0

Il devrait être res qui devrait être un type de réponse pas l'inverse. Pouvez-vous s'il vous plaît essayer cela? .then ((res: Response) => this.logResponse = res.json()) – ashley

Répondre

0

Si je comprends bien créer une classe de service qui sera utilisé pour informer les abonnés de la nouvelle valeur

import { Injectable } from '@angular/core'; 
import { BehaviorSubject } from 'rxjs/Rx'; 

@Injectable() 
export class ConnNotificationService { 

    private subject = new BehaviorSubject<any>(true); 
    constructor() { 
    } 

    sendMessage(message: boolean) { 
     this.subject.next(message); //all subscribers get the new value 
    } 

    getMessage() { 
     return this.subject.asObservable(); 
    } 
} 

Ensuite, si vous voulez passer, vous pouvez le faire comme suit:

toggleConn() { 
    if (this.logResponse.status === 'connected') { 
     this.ConnNotificationService.sendMessage(true); 
    } else { 
     this.ConnNotificationService.sendMessage(false); 
    } 

Par exemple dans votre login.comp Onent ou d'autres composants, vous pouvez obtenir la valeur comme suit

import { ConnNotificationService} from '...'; 
    import { Component } from '@angular/core'; 

    @Component({ 
... 
    }) 
    export class LoginPage { 
     connStatus: boolean; 

     constructor(private connService: ConnNotificationService) { 
     this.connService.getMessage().subscribe(val => this.connStatus=val); 
     } 

Espérons que cela aide.

Ashley

+0

Merci beaucoup pour ce repos, votre espoir se réalise;) –

+0

si cela fonctionne, reconnaissant si vous pouvez marquer ma réponse comme la solution. THX. – ashley