如何仅发出Observable的一个值或最后一个值?

时间:2018-10-17 10:26:20

标签: angular rxjs

父HTML:

<ng-container *ngFor="let doc of documents">
    <child [clickEvent]="eventSubject.asObservable()" [document]="doc"></child>
 </ng-container>

父类:

eventSubject: Subject<boolean> = new Subject<boolean>();
onclick(event)  {
    this.eventSubject.next(event)
}

儿童班:

@Input() keyEvent: Observable<boolean>;

this.keyEvent
    .subscribe(res => {
      console.log(res);
    })

因为我将事件绑定在* ngFor内,所以它发送的值与我的数组长度一样多。我必须获得可观察到的发射的最后一个值或一个值,这一点很重要。该怎么办?

我尝试使用take和last运算符,但是它们完成了流。

2 个答案:

答案 0 :(得分:1)

您可以将if条件放入HTML

解决方案1 ​​

 <ng-container *ngFor="let doc of documents; last as last">
    <child *ngIf= "!last" [document]="doc"></child>
    <child *ngIf= "last" [clickEvent]="eventSubject.asObservable()" [document]="doc"></child>
 </ng-container>

解决方案2

只需在ts文件中处理它即可。进行以下更改-

in html

<ng-container *ngFor="let doc of documents; last as last">
    <child [clickEvent]="handlClick(last)" [document]="doc"></child>
 </ng-container>

以ts

handlClick(isLast){
   if(isLast){
     return eventSubject.asObservable();
   }
}

答案 1 :(得分:0)

使用BehaviorSubject代替Subject。它具有getValue()方法,可为您提供当前的发射值。

查看此answer