Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何为(单击)角度应用switchMap?_Angular_Rxjs - Fatal编程技术网

Angular 如何为(单击)角度应用switchMap?

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

我有以下元素clik:

<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忽略传入的事件,直到当前事件完成。我已更新了答案。请查看它是否适用于您。如果我有一些单击,该怎么办?这是一些复选框