J'ai créé un service de compte, pour mon application angulaire et gère le login et la déconnexion. Et cela fonctionne parfaitement. Mais j'ai un problème, j'ai utilisé des observables comportementalsubject pour rendre les variables.
J'essaie de récupérer la valeur LoginStatus et la chaîne de nom d'utilisateur sur le composant à l'aide du service, mais l'observable renvoie un objet, et je suis avoir des problèmes d'extraction de la chaîne de l'objet. Comment puis-je extraire des types de variables des observables comportementalosubject? P>
Le service de compte ... p> Le composant à l'aide du service P> import { Component, Input, OnInit } from '@angular/core';
import { AccountService } from 'src/app/services/account.service';
import { Observable } from 'rxjs';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
pgtitle:string = "SCB Dashboard";
loginStatus$ : Observable<boolean>;
username$ : Observable<string>;
constructor(
private acc:AccountService
){}
ngOnInit() {
this.loginStatus$ = this.acc.isLoggedIn;
this.username$ = this.acc.currentUserName;
console.log(this.loginStatus$); //here it ruturns an object
console.log(this.username$); //and here too...
}
}
4 Réponses :
Vous devez S'abonner CODE> à l'observable pour obtenir la valeur de la valeur:
this.loginStatus$.subscribe(value => {
console.log(value); // access value
});
RxJ ComportourSubject a une méthode asobservable (), vous pouvez générer votre observable de celui-ci
Les sujets de comportement sont déjà observables, pas besoin de créer une nouvelle observable avec asobservable
Si ce code est en service, il serait une bonne pratique d'utiliser le code tel que celui-ci. Ensuite, marquez le sujet / le comportement à titre privé et le public observable de sorte que le code de composant peut accéder à l'observable, mais pas directement injecter des informations dans le flux.
Essayez ceci:
get isLoggedIn(){ return this.loginStatus.value; } get currentUserName(){ return this.userName.value; }
Ceci devrait également fonctionner:
ngOnInit() { this.loginStatus$ = this.acc.isLoggedIn.pipe( tap(status => console.log(status)) ); this.username$ = this.acc.currentUserName.pipe( tap(userName => console.log(userName)) ); }
ceci.Asername $ .Subscribe (valeur => {console.log (valeur)}); code>
this.loginstatus $ .getvalue () et cela.Aname $.getvalue () ferait le tour ou juste ceci.Loginstatus $ .value et ce nom $.Value
Oui, cela devrait fonctionner. Ici, un lien vers la documentation correspondante: github.com/reactive-extensions/rxjs/blob/master/doc/api/...