Angular2 InputFormControl 和 ValueChange 连续触发
Posted
技术标签:
【中文标题】Angular2 InputFormControl 和 ValueChange 连续触发【英文标题】:Angular2 InputFormControl and ValueChange fires continuously 【发布时间】:2018-05-11 04:01:53 【问题描述】:我有一个从输入字段检测到输入的简单案例。当输入的值发生变化时,经过很短的去抖动时间后,会调用一个服务,该服务会进行 http 调用并返回一些数据。
但是,服务不是只触发一次或两次,而是在 16-30 次之间调用 api - 即使输入只有 4 个字符,因此应该触发 4 次。
我怀疑这可能与回调有关,或者我错误地实现了 valueChanges 方法。在任何情况下,我都附上了一些代码以供审查,并感谢任何反馈,因为我是 Angular 新手,并且在实施中看不到任何错误。
inputChange(input)
this.inputFormControl.valueChanges
.debounceTime(5000)
.distinctUntilChanged()
.switchMap(input => this.userService.search(input))
.subscribe(data =>
this.data = data;
,
);
【问题讨论】:
如果你能把 Plunker 或 StackBlitz 放在一起,那就太棒了 没有足够的上下文......就像@ChauTran 说给我们一个stackblitz或其他东西,这样我们就可以提供帮助。 【参考方案1】:当值更改(假设)并且您也订阅valueChanges
时,您正在调用方法inputChange(input)
。删除inputChange
方法,直接使用valueChanges
:
constructor()
this.inputFormControl.valueChanges
.debounceTime(5000)
.distinctUntilChanged()
.switchMap(input => this.userService.search(input))
.subscribe(data =>
this.data = data;
);
还记得在组件被销毁时取消订阅!
【讨论】:
以上是关于Angular2 InputFormControl 和 ValueChange 连续触发的主要内容,如果未能解决你的问题,请参考以下文章
404 使用 Angular2、angular2-websocket 和类型
Angular2 [innerHtml] angular2 标签不起作用
Angular2 Dart - 在 Angular2 组件中获取文本
RangeError,谷歌地图方向服务。 angular2, SebastianM/angular2-google-maps