【问题标题】:Angular Reactive Form, valueChanges runs into "maximum call stack size"Angular Reactive Form,valueChanges 运行到“最大调用堆栈大小”
【发布时间】:2020-12-18 10:50:18
【问题描述】:

一旦表单发生更改,我就会尝试根据索引更改我的表单数组值。 给出以下情况: 我为每个阶段指定了开始和结束日期。除第一阶段外,一个阶段的开始日期应始终与前一阶段的结束日期相同。

我认为发生错误是因为 valueChanges 总是在方法结束时更改表单的值时调用自身。

  onChanges() {
this.projectForm.controls['phases'].valueChanges.subscribe(value => {
  for (var i = 1; i <= this.phasecount; i++) {
      this.projectPhases.at(i).patchValue({ pStart: value[i - 1].pEnd });                   
  }
})

}

你们中有人知道如何解决该错误(可能是终止条件)吗?

提前致谢。

【问题讨论】:

  • 这里多久调用一次 onChanges..?我希望只有一次?
  • 嘿,在 NgOnInit 函数中只有一次
  • 您可以尝试添加 {emitEvent: false, onlySelf:true} 作为 patchValue 的选项

标签: angular typescript forms onchange reactive


【解决方案1】:

这条线this.projectPhases.at(i).patchValue({ pStart: value[i - 1].pEnd }); 触发了这个事件this.projectForm.controls['phases'].valueChanges 并且它无限循环。

您可以在执行 patchValue 时将 emitEvent 选项设置为 false

this.projectPhases.at(i)
.patchValue({ pStart: value[i - 1].pEnd }, { emitEvent: false });

【讨论】:

  • 非常感谢,不再有最大调用堆栈大小 :)。但我现在收到以下错误:TypeError: Cannot read property 'patchValue' of undefined.
  • 这可能是因为您不知何故进入了this.projectPhases.at(i) 未定义的状态,您可能应该调试这行代码,直到遇到这种情况。
  • 没关系,我必须把
猜你喜欢
  • 1970-01-01
  • 2020-06-07
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2021-08-15
  • 2018-12-08
  • 2017-10-14
相关资源
最近更新 更多