Angular 如何为(单击)角度应用switchMap?
我有以下元素clik:Angular 如何为(单击)角度应用switchMap?,angular,rxjs,Angular,Rxjs,我有以下元素clik: <div *ngFor="let doc in docs"> <app-checkbox (onSelected)="onSelectedDocument(doc, $event)" [disabled]="isApprepdocsDisabled(doc)" [checked]="doc.isappr
<div *ngFor="let doc in docs">
<app-checkbox (onSelected)="onSelectedDocument(doc, $event)" [disabled]="isApprepdocsDisabled(doc)"
[checked]="doc.isapprepdocs == 1"
[id]="doc.index"></app-checkbox>
</div>
事件的名称和处理程序:
public closed$ = new Subject<any>();
public documentChecked$ = new Subject<any>();
ngAfterViewInit() {
this.documentChecked$
.pipe(
exhaustMap((data: { docid: number; checked: boolean }) =>
iif(
() => data.checked,
this.applicationDocumentsService.addtoappdoc(data.docid),
this.applicationDocumentsService.removefromappdoc(data.docid),
),
),
takeUntil(this.closed$),
)
.subscribe(
(res) => {
console.log(res);
},
(err) => {},
);
}
为什么在服务器出错后,下一次单击不会发出值?您可以使用RxJS函数根据条件选择一个可观测值。试试下面的方法
public on selecteddocumentdoc:any,checked:boolean:void{
iif
=>已检查,
this.applicationDocumentsService.addtoappdocdoc.docid,
this.applicationDocumentsService.removefromappdocdoc.docid
订阅
res=>{},
错误=>{}
}
更新:忽略事件,直到当前事件完成
要忽略传入事件,需要使用exhaustMap映射操作符。switchMap实际上与您需要的正好相反。它将在发出新事件时取消当前请求
您还可以删除模板中的click事件绑定,并使用ViewChild和RxJS fromEvent函数从div元素获取click事件。试试下面的方法
模板
点击
控制器
从'@angular/core'导入{Component、OnInit、OnInit、AfterViewInit、OnDestroy、ElementRef、ViewChild};
从'rxjs'导入{iif,fromEvent,Subject};
从“rxjs”导入{takeUntil,defaustmap};
导出类SomeComponent实现OnInit、AfterViewInit、OnDestroy{
已关闭$=新主题;///已选中,
this.applicationDocumentsService.addtoappdocdoc.docid,
this.applicationDocumentsService.removefromappdocdoc.docid
,
Takeuntelthis.关闭$
订阅
res=>{},
错误=>{}
;
}
恩戈德斯特罗{
this.closed$.next;//{},
错误=>{}
;
}
恩戈德斯特罗{
this.closed$.next;//检查值来自何处?请详细说明一下?sendinf请求列表是什么?在onSelectedDocument函数中调用它的位置是什么?是的,我需要阻止下一个请求,直到ResosOne出现。这不作为swithMap工作,我可以单击一些时间。是否要在订阅之前禁用单击事件选项已完成?是的,我希望,在get responseswitchMap执行与您实际需要完全相反的操作之前不允许下一个请求。您需要使用exhaustMap忽略传入的事件,直到当前事件完成。我已更新了答案。请查看它是否适用于您。如果我有一些单击,该怎么办?这是一些复选框