【发布时间】:2017-06-21 20:47:01
【问题描述】:
我在 Angular 2 中构建了一个加载微调器组件,我想在发出 http 请求之前触发它,并在它们完成时禁用它。问题是每次用户更改输入(检查框,输入输入框)时,都会触发 http 请求。这意味着很多请求,并且覆盖层不断出现。我想在触发输入后等待一段时间(半秒?),然后再触发 http 请求,让用户有时间输入其他输入。我已经阅读了一些关于 debounce 的内容,但据我所知,这是在发出另一个请求之前等待的时间吗?据我所知,这只是请求之间的缓冲时间。
基本上,现在,我有一个组件来处理我的输入。当输入改变时(现在是复选框),会触发以下代码:
@Output() filtersChanged = new EventEmitter();
emitFilters(): void {
this.filtersChanged.emit(this.filters);
}
通过中间步骤触发我的 http 请求:
getEvents(filters): Observable<Event[]> {
this.loadingSpinnerService.showLoadingSpinner();
let params: URLSearchParams = new URLSearchParams();
params.set('types', filters.types.join(','));
params.set('dates', filters.dates.join(','));
return this.http
.get('//api.dexcon.local/getEvents.php', { search: params })
.map((response: Response) => {
return response.json().events;
});
}
在 Angular 1 中,我会将其置于每次用户影响输入时刷新的超时,因此它会在最终输入被触摸后触发设定的时间。这也是 Angular 2 中最好的方法吗?根据我的阅读,去抖动会阻止请求发生得太接近第二个请求,但我想知道如何最好地防止在给定时间段内采取行动后发生请求。
【问题讨论】:
-
请发布代码,展示您尝试完成的工作、尝试的工作以及失败的地方。
-
我没有特定于节流的代码,我在询问理论,它应该如何完成。我还没有编写代码,因为我无法弄清楚这里适合什么方法。我应该从我的 Angular 1 代码中显示设置的超时功能吗?还是我应该只使用 Angular 2 提供到目前为止的代码?
-
SO 问题应该证明您的努力。也许stackoverflow.com/questions/32051273/angular2-and-debounce
-
我会提交我的代码,尽管我已经看到并使用了大量的 SO 问题,这些问题没有显示代码,并且只是关于正确/错误的做事方式,所以我没有自己问一个人觉得很奇怪。我之前看到过这个问题,但它并没有真正解决我想要做的事情,除非我也不明白它做了什么。我可以展示我现在拥有的代码,但我无法展示我搜索的努力并且无法理解如何做到这一点?
-
当然有很多平庸或糟糕的问题。他们中的许多人没有得到好的答案是有充分理由的;-)
标签: angular