Bra*_*vo 1 javascript rxjs typescript angular
我正在寻找有效的解决方案,以避免用户一次又一次地单击提交按钮,直到他们从后端 API 得到响应。
我想过以下解决方案,但正在寻找任何其他方法来处理这个问题。
使用 loader 将禁用整个 html,直到我们得到一些响应。
使用exhaustmap避免多次http调用
使用throttletime 将手动不允许用户点击特定时间段。
如果我们可以使用任何其他解决方案,请指导我。
小智 7
您可以禁用按钮本身,直到通过组件的控制器文件中的标志获得响应为止。
// 在组件的控制器中
loading = false;
.
...
submit(): void {
loading = true;
this.someserive.getData().pipe(finalize(() => this.loading = false).subcribe(...
.
....
}
Run Code Online (Sandbox Code Playgroud)
// 在组件的模板中
<button [disabled]="loading" (click)="submit()">Submit</button>
Run Code Online (Sandbox Code Playgroud)
exhaustMap()在这种情况下,我建议将其用作主要解决方案。在模板中:
<button (click)="submitForm()">Submit</button>
Run Code Online (Sandbox Code Playgroud)
然后在您的组件中:
submit$: Subject<boolean> = new Subject();
constructor() {
this.submit$.pipe(
exhaustMap(() => this.http.get("api/endpoint"))
).subscribe(res => {});
}
submitForm() {
this.submit$.next(true);
}
Run Code Online (Sandbox Code Playgroud)
您单击“提交”,exhaustMap()操作员将忽略所有正在进行的单击事件,直到 HttpClient 实例返回响应并完成。
| 归档时间: |
|
| 查看次数: |
903 次 |
| 最近记录: |