typescript 第一次未击发的Angular 值变更

nfeuvbwi  于 2023-01-21  发布在  TypeScript
关注(0)|答案(2)|浏览(118)

我有一个输入按钮,在onChange中,我调用一个函数。在这个函数中,我检查valueChanges。不知何故,在输入值后的第一个选项卡上没有触发对valueChanges的订阅。
下面是一些代码片段:超文本:

<input type="text" formControlName='{{subControl.name}}' 
(change)="fetchData(subControl.name, 
 true)"/>

TS:

public fetchData(formControlName: string, fetchData: boolean): void {
if (this.primaryControls.indexOf(formControlName) !== -1 && 
   fetchData) {
  this.uiForm.get(formControlName)?.valueChanges **//fine till here. Gets executed**
    .pipe(
      debounceTime(1000)
    )
    .subscribe(data => { **// This subscribe is not firing**
      if (!this.uiForm.dirty) {
        return;
      }
         //do some stuff here
     }});
jdzmm42g

jdzmm42g1#

每次更改输入时,都在创建新的订阅。最初没有任何React,因为还不存在订阅。
只需在init中订阅valueChanges一次,如果有多个,则使用循环。

ngOnInit(){
  this.uiForm.get(this.subControl.name)?.valueChanges.pipe(...).subscribe(...);
}
<input type="text" formControlName='{{subControl.name}}'/>

我假设subControl是一个组件属性,这可能不是真的,但我相信你明白我的意思。

kgsdhlau

kgsdhlau2#

您可以在管道中使用带有一些初始值的startWith()来第一次触发订阅。
也可以选择在管道中包含distinctUntilChanged()

this.uiForm.get(this.formControlName)?.valueChanges.pipe(debounceTime(1000), distinctUntilChanged(), startWith(this.uiForm.get(this.formControlName).value)).subscribe(...);

相关问题