Как создать Observable из дочернего значения переменной @Input? - PullRequest
0 голосов
/ 02 октября 2019

У меня есть дочерний компонент, который принимает значение @Input из выпадающего списка родительского компонента. У этого значения есть массив объектов, которые я хочу передать в качестве источника данных в таблицу, поэтому мне нужно создать некоторое Observable для поддержки этого и изменить его при изменении значения @Input и т. Д. Я знаю, что это основнойвопрос, но все еще оборачиваюсь вокруг парадигмы углового дизайна.

Учитывая значение @Input как таковое:

   @Input() parentObject: ParentObject

Я пытался ссылаться на значение напрямую, как:

   rowData = this.parentObject._rows;

Это прерывается, потому что он заполнен асинхронно, поэтому во время выполнения parentObject изначально не определен.

Я пытался:

   ngOnChanges(change: SimpleChanges){
      if (changes.parentObject.currentValue){
         rowData = changes.parentObject.currentValue._rows;
      }
   }

Это прерывается, потому что _rows является массивом, а не Observable. Я полагаю, что я мог бы обернуть _rows в Observable, когда я установил его, но это выглядит глупо.

Обратите внимание, что я не пытаюсь передать значение обратно родителю, просто потреблять его в таблице в дочернем элементесоставная часть. Я также экспериментировал с темой, которая компилируется и работает нормально, но по какой-то причине таблица не получает обновленные данные. Я включил этот код здесь, чтобы быть более понятным, что я делаю:

   rowData = new Subject<Row[]>();

   ngOnChanges(change: SimpleChanges){
      if (changes.parentObject.currentValue){
         this.rowData.next(changes.parentObject.currentValue._rows);
      }
   }

и в моем .html:

   <ag-grid-angular
     style="width: 500px; height: 500px;"
     class="ag-theme-balham"
     [rowData]="rowData | async"
     [columnDefs]="columnDefs">
   </ag-grid-angular>

Я уверен, что есть какой-то действительно простой способделать это взаимодействие, которое я не рассматриваю.

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