订阅多个字段的 valueChanges 导致反应形式 angular 2 的性能问题

Posted

技术标签:

【中文标题】订阅多个字段的 valueChanges 导致反应形式 angular 2 的性能问题【英文标题】:Subscribing to valueChanges for multiple fields is causing performance issue in reactive form angular 2 【发布时间】:2021-04-09 15:46:38 【问题描述】:

我有 50 多个字段,它们是响应式表单中的输入文本和下拉菜单。这些字段相互依赖于彼此的值更改,以触发验证并在选择后显示相关字段。

我订阅了 ngOnInit() 中的值变化如下:

  ngOnInit() 

    this.setPageValidation();

  

  setPageValidation() 
    this.NameSubscription = this.FormGroup.get('personnel').get('name').valueChanges.subscribe(data 
      => 
     this.enableOrders();
    );

   this.StateSubscription = this.FormGroup.get('personnel').get('state').valueChanges.subscribe(data 
     => 
    
      this.enableAccount();
    );
   
    // more value changes subscription like 40 fields ............................
  

在加载表单时,由于订阅了表单加载时的值更改,因此加载时间较长。

我尝试实现它以将代码移动到 ngOnChanges() 但它不会触发其他字段的启用和显示,具体取决于从表中填充的初始值(如果有值)那些领域。它只是填充第一个字段,其余字段不会根据其值显示。

我想提前感谢您。如果有没有性能问题的最佳解决方法,我非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

您可以只订阅一次。

this.personnelSubscription = 
  this.Formgroup.get('personnel').valueChanges.subscribe(data => 
     if (data) 
        //Console log the data here. It will print the formGroup of personnel
        // then select the control and add your validations
        // like this data.controls.state
     
  )

【讨论】:

以上是关于订阅多个字段的 valueChanges 导致反应形式 angular 2 的性能问题的主要内容,如果未能解决你的问题,请参考以下文章

Reactive Form valueChanges observable 重置表单值

Angular 2 - 订阅 FormControl 的 valueChanges 是不是需要取消订阅?

Angular 4 监听 setValue 或 patchValue 而不是使用 valueChanges

是否可以在Angular6的多个输入字段中对字符进行计数

如何使用模型驱动/反应形式修改指令中的输入值

Angular 5 - 反应形式