angular - 角度点击去抖动
问题描述
在我的模板中,我有一个字段和两个按钮:
<div class="btn-plus" (click)="add(1)"> - </div>
<div class="txt"> {{ myValue }} </div>
<div class="btn-minus" (click)="add(-1)"> + </div>
在我的组件 .ts 文件中,我有:
add(num) {
this.myValue +=num;
this.update(); // async function which will send PUT request
}
该this.update()
函数myValue
在一个大的 JSON 对象中放入适当的字段并将其发送到服务器。
问题:当用户在短时间点击按钮加/减10次时,请求将被发送10次。但我只想发送一次请求 - 最后一次点击后 0.5 秒。怎么做?
解决方案
使用takeUntil
运算符:
export class AppComponent {
name = 'Angular';
calls = new Subject();
service = {
getData: () => of({ id: 1 }).pipe(delay(500)),
};
click() {
this.calls.next(true);
this.service.getData().pipe(
takeUntil(this.calls),
).subscribe(res => console.log(res));
}
}
Stackblitz(打开控制台查看日志)
推荐阅读
- git - 使用 GitHub 的 Git 身份验证失败,远程:没有匿名写访问权限
- javascript - 登录失败后显示警报的问题
- go - 来自 golang 在 kubernetes / coreDNS 上的 SRV 查找超时
- discord.py - Discord.py,如果消息长度大于特定数字,则将其分成几行
- emacs - org-plot 输出在 emacs-29 中的什么位置?
- hl7-fhir - 如何从 hapi fhir 客户端调用 partition-management-create-partition
- r - 有什么方法可以检测数据框中的“错误”度量吗?
- python - Python 3.9 中的 TCP 聊天 - ConnectionAbortedError: [WinError 10053]
- python - 在循环内更新字典
- postgresql - 使用 IN 转换 PostgreSQL JSONB 列结果以用于条件