【发布时间】:2020-11-27 09:26:23
【问题描述】:
我正在使用父组件和子组件。子组件具有输入字段,并将用户输入的值发送给父组件,如下所示:
<parent-component (sendInputValue)="getInputValue($event)"><parent-component>
现在在父组件中我有这个:
getInputField(data){
console.log(data); // this prints the data (Example: abc)
// then here I'm just executing the API call ONLY if data length is 3
if(data.length === 3){
this.myService.getDataFromService(data).subscribe(rs=>console.log(rs));
}
}
现在假设发生这种情况:
- 用户输入:abc // API 调用得到执行,这很好
- 现在,用户输入:abcd // 没有执行 API 调用,这很好
- 现在用户删除了字母“d”,数据的新值将是“abc”我不想再次执行 API 调用,因为我们已经为“abc”执行了 API 调用
- 现在如果用户删除字母“c”,数据的新值现在是“ab”。此时,不需要 API 调用
- 现在,如果用户添加字母“c”,新值将是“abc”。此时,API 调用是预期的。 (这是有效的)
那么,如果输入数据是 3 个字符,并且如果用户输入更多字符什么都不应该发生,那么如何始终执行 API 调用,如果他删除字符并返回前 3 个字符,则应该什么都不发生,因为 API 已经发生了?提前非常感谢!
【问题讨论】:
-
听起来很复杂。也许另一种方法是使用
debounce,您不会立即进行 API 调用。相反,您在输入字符之间有 1 秒的延迟,并且 API 调用将在输入最后一个字符后 1 秒进行。在这种情况下,您不必跟踪是否进行了 API 调用,以及检查击键是否为退格等。 -
@codemax 简单来说,我的问题是如果我已经输入“abc”并进行了 API 调用,那么如果用户输入“abcd”并删除“d”,则不要再进行 API 调用,这有意义吗?
-
当您从子组件发出值时,您能否指定子组件的逻辑。 ?
-
在你的例子中你有
<parent-component (sendInputValue),但我认为它应该是<child-component (sendInputValue) -
@progx 我已经添加了一个答案,你能检查一下并给出你的反馈吗?
标签: javascript angular typescript rxjs