Angular Reactive Form - FormArray ChangeDection onPush无法工作

问题描述 投票:0回答:1

我们在所有的组件中使用ChangeDetectionStrategy Onpush,所以我们遵循dumpsmart组件的方法,所以我们在servicefacade端保留了所有的逻辑部分。

现在我们需要使用Reactive Forms、FormGroup、FormArray来生成动态控件。

所以我们在服务端准备FormGroup和FormArray,并将这些作为输入参数传递给dump组件,在这种情况下,我不能将这些作为行为主体作为observable传递,而是直接作为输入参数传递。

如果FormArray有什么变化,由于OnPush changeDectionStrategy的原因,它不会反映在dump组件中。

我在这里模拟了实现 爆料

在这个示例中,我在服务文件中准备了FormArray、FormGroup,并通过智能组件传递给dump组件。

我找不到合适的Behavioursubject和Abstract控件的例子。

如果可以将FormArray, FormGroup作为Observable传递,请帮助我知道。

angular rxjs angular-reactive-forms angular-forms rxjs-observables
1个回答
0
投票

在stackblitz的例子中,即使从Layer-Container组件中,FormGroup和FormArrays都是未定义的,因为变量是在初始数据加载之前从服务中获取的。如果这样做,再取服务变量传给子组件,就会得到值。

import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
import { LayerService } from '../layer.service';

@Component({
  selector: 'app-layer-container',
  templateUrl: './layer-container.component.html',
  styleUrls: ['./layer-container.component.css'],
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class LayerContainerComponent implements OnInit {
layerFormGroup ;
layerFormArray ;

  constructor(private service : LayerService) { 
    this.service.loadInitialData();
    this.layerFormGroup = this.service.layerFormGroup;
    this.layerFormArray = this.service.layerFormArray; 
  }

  ngOnInit() {
    this.service.loadInitialData();
  }

}

而且由于FormArray和FormGroup都不是原始数据类型,所以@Input()无法识别,我们可能也无法检测到这些变化。传递一个新的这些变量的引用也许就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.