父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运算符,但是它们完成了流。
答案 0 :(得分:1)
您可以将if条件放入HTML
<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>
只需在ts
文件中处理它即可。进行以下更改-
<ng-container *ngFor="let doc of documents; last as last">
<child [clickEvent]="handlClick(last)" [document]="doc"></child>
</ng-container>
handlClick(isLast){
if(isLast){
return eventSubject.asObservable();
}
}
答案 1 :(得分:0)
使用BehaviorSubject
代替Subject
。它具有getValue()
方法,可为您提供当前的发射值。
查看此answer