Angular Реактивная форма - FormArray ChangeDection onPu sh не работает - PullRequest
0 голосов
/ 29 мая 2020

Мы используем ChangeDetectionStrategy Onpu sh во всех компонентах, поэтому мы следуем подходу дампа / интеллектуальных компонентов, поэтому мы сохраняем всю логическую часть на стороне службы / фасада.

Сейчас нам нужно для генерации динамических c элементов управления с использованием Reactive Forms, FormGroup, FormArray,

Итак, мы готовим FormGroup и FormArray на стороне службы и передаем их компоненту дампа в качестве входного параметра, в этом случае я не мог передать это как объект поведения как наблюдаемый, я напрямую передаю его как входной параметр.

Если что-то меняется в FormArray, это не отражается в компоненте дампа из-за OnPu sh changeDectionStrategy.

Я высмеял реализацию в этом stackblitz

В этом примере я подготовил FormArray, FormGroup в служебном файле и передал компоненту дампа через интеллектуальный компонент.

Мне не удалось найти подходящие образцы в элементах управления Behavioursubject и Abstract,

Если возможно передать FormArray, FormGroup как Observable, пожалуйста, помогите мне узнать.

1 Ответ

0 голосов
/ 29 мая 2020

В примере stackblitz и FormGroup, и FormArrays не определены даже в компоненте Layer-Container, потому что переменные берутся из службы до загрузки исходных данных. Если вы сделаете это, а затем получите переменные службы и передадите их дочернему компоненту, тогда будут получены значения.

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 () не может распознать изменения, и мы, вероятно, не сможем обнаружить изменения. Передача новой ссылки на эти переменные может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...