角度反应形式 - FormArray ChangeDection onPush 不起作用



我们在所有组件中使用ChangeDetectionStrategy Onpush,因此我们遵循转储/智能组件方法,因此我们将所有逻辑部分保留在服务/外观端。

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

所以我们在服务端准备 FormGroup 和 FormArray,并将它们作为输入参数传递给转储组件,在这种情况下,我无法将它们作为行为主体作为可观察对象传递,我直接作为输入参数传递。

如果 FormArray 中有任何更改,由于 OnPush 更改DectionStrategy,它不会反映在转储组件中。

我嘲笑了这个堆栈闪电战中的实现

在此示例中,我准备了 FormArray,服务文件中的 FormGroup,并通过智能组件传递到转储组件。

我找不到关于行为主题和抽象控制的适当样本,

如果可以通过FormArray,FormGroup作为可观察的,请帮助我知道。

在堆栈闪电战示例中,FormGroup 和 FormArray 都是未定义的,即使从层容器组件中也是如此,因为变量是在加载初始数据之前从服务中获取的。如果这样做,然后获取服务变量并将其传递给子组件,则将获得值。

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(( 无法识别更改,我们可能无法检测到更改。传递这些变量的新引用可能就可以解决问题。

最新更新