将Observable <boolean>转换为布尔值

Lee*_*287 0 behaviorsubject angular

由于多种原因,这不是重复的。1.我使用的是角度7,而不是角度2。2.我使用的是rxjs6,而不是rxjs5。学习这些较早的版本已不存在,我对此无益。3.当这个问题没有提到Observable(boolean)时,我问的是Observable(boolean)概念

我创建了一个Observable值,希望从中得出true / false。这是我在nav.component.ts文件中的代码

export class NavComponent implements OnInit {
  private $loggedin: Observable<boolean>;

  constructor( private auth: AuthenticationService){}
  ngOnInit() {
    this.$loggedin = this.auth.$isLoggedinSource;
    console.log('am i logged in ', this.$loggedin);
  }
Run Code Online (Sandbox Code Playgroud)

控制台输出为:

am i logged in Observable {_isScalar: false, source: BehaviorSubject}
               source: BehaviorSubject {_isScalar: false, observers: 
               Array(0), closed: false, isStopped: false, hasError: 
               false, …}
               _isScalar: false ...
Run Code Online (Sandbox Code Playgroud)

如何从$ loggedin中获取布尔值,真/假值?

Sid*_*era 5

您可以通过两种方式解包Observable的值。

  1. 通过使用async模板中的管道:

    <p>Am I logged In: {{ $isLoggedinSource | async }}</p>

要么

  1. 通过subscribe查看组件中的Observable:

import { Subscription } from 'rxjs';

...

subscription: Subscription;

...

this.subscription = this.$loggedin
  .subscribe(data => console.log('am i logged in ', data));

...

ngOnDestroy() {
  this.subscription.unsubscribe();
}
Run Code Online (Sandbox Code Playgroud)

使用哪一个?

如果该$loggedinObservable重复发生,并且您使用了方法2,则必须将其分配给一个Subscription类型化的属性,然后在中调用unsubscribe它ngOnDestroy。

使用第一种方法,您实际上并不需要这样做。