javascript - 在角度的 debouceTime 之后不订阅
问题描述
我希望在 300 毫秒emit
数据后使用输入数据来执行此操作,我使用 debouceTime :
subject: Subject<any> = new Subject();
constructor(private formBuilder: FormBuilder) { }
ngOnInit();
sendValue(): void {
this.subject.pipe(debounceTime(300))
.subscribe(() => {
this.formValue.emit(this.dynamicForm.value);
})
}
这是html:
<input
(change)="sendValue()"
required
[formControlName]="controls.controlName"
matInput
/>
但它不会在 300 毫秒后执行订阅。
有什么问题 ?我怎么解决这个问题 ???
解决方案
您正在创建一个 RxJSSubject
可观察对象并直接订阅它。除非将任何值推送给它,否则它不会发出。在这种情况下,使用外部 observable 是没有根据的。
您可以做的是valueChanges
使用FormControl
. 您也不需要绑定到change
事件。将valueChanges
在元素的值发生变化的任何时候发出,因为它是一个FormControl
元素。
尝试以下
控制
ngOnInit() {
...
this.controls.controlName.valueChanges.pipe( // <-- form control here
debounceTime(300)
)
.subscribe(() => {
this.formValue.emit(this.dynamicForm.value);
});
}
模板
<input
required
[formControlName]="controls.controlName"
matInput
/>
更新:组合多个 observable
如果您有多个控件,一种方法是valueChanges
使用 RxJSmerge
函数组合所有可观察对象。
ngOnInit() {
...
merge(
this.controls.controlName.valueChanges,
this.controls.controlPhone.valueChanges,
this.controls.controlId.valueChanges,
...
).pipe(
debounceTime(300)
)
.subscribe(() => {
this.formValue.emit(this.dynamicForm.value);
});
}
推荐阅读
- html - 为什么这个 twitter script/iframe 不浮动到右侧?
- html - 设置 max-height flex 父级,拉伸嵌套子级,但在其内部 overflow-y auto
- python - 将方法局部变量分配给类属性
- javascript - 将响应列表从水平更改为垂直 CSS
- javascript - 生成 JSON 翻译文件
- node.js - pg-promise - 将多个嵌套循环查询组合到父数组结果
- sockets - 如何将网络套接字连接发送到龙卷风中的不同进程?
- django - 如何在 Django 中更改模板中的子模板?
- android - 工作状态观察者始终处于排队状态
- php - 使用 PHP 访问 Windows 对象?