javascript - 如何从 Angular 中的 BehaviouralSubject 中提取值

标签 javascript angular rxjs observable

我为我的 Angular 应用程序创建了一个帐户服务,它处理登录和注销。这很有效。但我遇到了一个问题,我使用 BehaviourSubject Observables 来渲染变量。

我正在尝试检索登录状态值以及使用该服务的组件上的用户名字符串,但可观察对象返回一个对象,并且我在从对象中提取字符串时遇到问题。如何从 Behavioursubject 可观察量中提取变量类型?

账户服务...

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable, Subject, BehaviorSubject } from 'rxjs';
import { map } from 'rxjs/operators';
import { Router } from '@angular/router';


@Injectable({ 
  providedIn: 'root'
})

export class AccountService {
  

  private baseUrlLogin:string = "/api/account/login";

  private loginStatus = new BehaviorSubject<boolean> 
  (this.checkLoginStatus());  
  private userName = new BehaviorSubject<string> localStorage.getItem['username']);

  constructor(
    private http:HttpClient, 
    private router: Router
  ){}

  login(username:string, password:string){
    return this.http.post<any>(this.baseUrlLogin,{username, password}).pipe(
               map(result => {
                  if(result && result.token){
                      localStorage.setItem('loginStatus', '1'); 
                      localStorage.setItem('username', result.username),

                  }
                  return result;
                  
               })
           );

  }

  logout(){
    this.loginStatus.next(false);
    localStorage.setItem('loginStatus', '0');  
    localStorage.removeItem('username'),
    localStorage.clear();

    //now redirect to the login page... 
    this.router.navigate(['/login']);
    console.log("logged out successfully...");
  }

   
  get isLoggedIn(){
    return this.loginStatus.asObservable(); 
  }

  get currentUserName(){
    return this.userName.asObservable();  
  }

}

使用服务的组件

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... 

  }

}

console.log() 返回一个对象,但如何检索变量并在 Controller 中使用它们,因为它们是可观察类型的?

最佳答案

Rxjs BehaviourSubject 有一个 asObservable() 方法,你可以从中生成你的 observable

let sourceSubject = new BehaviourSubject();
let source$ = sourceSubject.asObservable();

source$.subscribe(result => // Your data)

// Update the BehaviourSubject

sourceSubject.next(newValue);

关于javascript - 如何从 Angular 中的 BehaviouralSubject 中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57074143/

相关文章:

c# - 通过javascript更改下拉列表的值后,asp.net中下拉列表的值消失

javascript - 选择所有复选框...使用 javascript 和 rails

javascript - 如何从另一个功能更改按钮?

javascript - 如何在javascript中根据本月动态获取当前3个月?

javascript - 重新设计的半折叠侧边栏 - R shinydashboardplus

javascript - 如果图像 src 解析为 404 错误,则使用 Angular 隐藏 div

angular - 文档未从 Firestore 中删除

angular - RXJS AngularFire - 从 Observable 获取 Observables

angular - 如何正确取消订阅这种可观察的

javascript - Angular2 中的 'rxjs/Subject' 是什么?