将Observable <boolean>转换为布尔值

时间:2019-01-17 13:26:42

标签: angular behaviorsubject

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

时,我在问一个Observable(boolean)概念。

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

    DB::statement('ALTER TABLE `invoices` DROP INDEX 
   `invoices_erp_id_origin_customer_id_unique`, ADD UNIQUE 
   `invoices_erp_id_origin_customer_id_unique`
   (`erp_id`, `origin`, `customer_id`, `podtyp`)');

控制台输出为:

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);
  }

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

4 个答案:

答案 0 :(得分:5)

有两种方法可以用来解包Observable的值。

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

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

OR

  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();
}

要使用哪个?

如果此$loggedin重复出现,并且您使用方法2,则必须将其分配给Subscription类型的属性,然后在内部的unsubscribe上对其进行调用ngOnDestroy

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

答案 1 :(得分:2)

您必须怀疑它。现在,Rigth正在记录Observable对象本身,但是您需要对其进行订阅,因此,在解析该对象时,您的订阅将监听该对象,然后打印其解析的内容。

答案 2 :(得分:2)

如果您不想订阅,则可以使用asyncawait获得可观察的值,但是要这样做,您必须将Observable转换为`Promise。

类似这样的东西:

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  public loggedin: boolean;
  public otherValue: boolean;

  constructor(private auth: AuthenticationService) { }

  async ngOnInit() {
    this.loggedin = await this.auth.$isLoggedinSource.toPromise();
    this.otherValue = await this.auth.$otherObservable.toPromise();
  }
}

You can see it working in this stackblitz link.

答案 3 :(得分:1)

您必须订阅观察数据才能获取数据。

this.$loggedin.subscribe((data: boolean) => { console.log('am i logged in ', data); }