我们在所有的组件中使用ChangeDetectionStrategy Onpush,所以我们遵循dumpsmart组件的方法,所以我们在servicefacade端保留了所有的逻辑部分。
现在我们需要使用Reactive Forms、FormGroup、FormArray来生成动态控件。
所以我们在服务端准备FormGroup和FormArray,并将这些作为输入参数传递给dump组件,在这种情况下,我不能将这些作为行为主体作为observable传递,而是直接作为输入参数传递。
如果FormArray有什么变化,由于OnPush changeDectionStrategy的原因,它不会反映在dump组件中。
我在这里模拟了实现 爆料
在这个示例中,我在服务文件中准备了FormArray、FormGroup,并通过智能组件传递给dump组件。
我找不到合适的Behavioursubject和Abstract控件的例子。
如果可以将FormArray, FormGroup作为Observable传递,请帮助我知道。
在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()无法识别,我们可能也无法检测到这些变化。传递一个新的这些变量的引用也许就可以了。