Как обнаружить изменение в ag-сетке, когда данные моей строки обновляются при передаче от одного компонента к другому

Я работаю над проектом на angular6, и мы реализуем ag-grid для заполнения данных из углового диалогового окна. Поскольку несколько команд работают, поэтому они создают свой собственный компонент. Я застрял в одной из необычных ситуаций, и я не могу понять, как разрешить ситуацию. У нас есть кнопка под названием (ДОБАВИТЬ ВЛАДЕЛЬЦА), которая представляет собой компонент под названием ADD-OWNER.component.ts, где я открываю диалоговое окно и передаю другой компонент под названием ownerdetails.component.ts, который содержит все мои данные формы. В диалоговом окне есть 2 кнопки (ДОБАВИТЬ / ОТМЕНА), поэтому я отправляю данные в службу метаданных, поскольку мне не нужно сохранять в базе данных, я должен хранить данные в браузере. Эта часть кодирования, которую я выполнил в событии dialog.closed, работает нормально. Теперь мне нужно передать эту информацию о владельце в другой компонент, называемый Gridcomponent, где находится моя сетка ag, поэтому я использовал событие свойства ввода для отправки данных от моего владельца добавления. компонент в компонент сетки. Я визуализирую селектор компонентов сетки в моем add-onwer.component.ts, передавая входные данные, как указано. Теперь я использую свойство input в своей сетке для получения значения, но я хочу, чтобы сетка обновлялась автоматически при изменении данных строки. Значение не обновляется, как мне этого добиться. Я мог видеть, что значения помещаются в список владельцев, но каким-то образом я должен отображать их в сетке. У меня нет точного кода, но я изо всех сил старался объяснить.

ДОБАВИТЬ-ВЛАДЕЛЬЦА.Component.html

<button mat-button (click)="openDialog()">Open dialog</button>
      <app-grid-selector [gridOptions]="ownerlist ">

ДОБАВИТЬ-ВЛАДЕЛЬЦА.Component.ts

  openDialog() {
    const dialogRef = this.dialog.open(OwnerDetails);

    dialogRef.afterClosed().subscribe(result => {
      ownerlist = Pushing data into a metadata service which is working fine
    });}

grid.component.html

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

grid.component.ts

 @Input() gridoptions
   ngOnint(){
   owner =this.gridOptions.rowData
   }

person Sarvesh Gupta    schedule 03.12.2018    source источник
comment
@ThierryTemplier, не могли бы вы мне помочь?   -  person Sarvesh Gupta    schedule 03.12.2018
comment
@PratikBhat, я не подписываюсь, я нажимаю данные владельца в службу метданных (диалог закрыт), как я уже упоминал, который я передаю в ag-grid. У меня есть событие gridready, которое я думаю, инициализируется, когда сетка готова. Как использовать api .refreshCells, не могли бы вы мне помочь, мне не нужны дополнительные кнопки или обработчики. Я хочу, чтобы сведения приходили автоматически при изменении в rowData   -  person Sarvesh Gupta    schedule 03.12.2018
comment
Дело в Pratik, где мне поместить этот код api.refreshCells (cellRefreshParams) в вашу подписку? или gridApi.setRowData (ownerList.rowData). Я не могу установить ngOninit, так как моя сетка уже была инициализирована в первый раз, и она не будет повторяться, и я не хочу, чтобы никакая другая кнопка или обработчик кликов устанавливали новое значение. Я хочу, чтобы сетка выяснила. автоматически произошло изменение rowData   -  person Sarvesh Gupta    schedule 03.12.2018
comment
По сути, вы хотите, чтобы ваша служба метаданных возвращала наблюдаемые объекты, на которые будет подписан ваш компонент ag-grid; и впоследствии использовать код обновления. В зависимости от того, как структурирован ваш проект, я бы рекомендовал использовать redux (ngrx / store или angular-redux) для управления состоянием.   -  person Pratik Bhat    schedule 03.12.2018
comment
@PratikBhat, pratik, дело в том, что только у меня есть 2 разных компонента -ADD-OWner и gridcomponet, если бы это был один компонент, я могу делать то, что вы говорите в подписке, но я должен делать то же самое в компоненте Grid без какого-либо обработчика или кнопки   -  person Sarvesh Gupta    schedule 03.12.2018
comment
проверьте этот вопрос и ответ - stackoverflow.com/questions/43241173/   -  person Pratik Bhat    schedule 03.12.2018
comment
@PratikBhat благодарит практику за эти статьи, но я мог видеть во всех них то, что они похожи на то, что сетка находится в том же компоненте, где они подписываются, поэтому они могут вызывать обновление api или другие вещи в закрытом событии / подписке, но в моем случае - мой диалог в одном компоненте (ADD-ONWER), а моя сетка находится в другом компоненте (сетке), и я использую свойство input get и set для установки данных в сетку, когда я нажимаю несколько раз. это не работает   -  person Sarvesh Gupta    schedule 03.12.2018
comment
Я не думаю, что вы поняли мою мысль - диалог добавления владельца - ›обновляет данные с помощью службы -› эта служба предоставляет getData, которая должна возвращать наблюдаемое - ›Компонент ag-grid должен уже подписаться на этот наблюдаемый объект и получать любые обновления, внесенные в Данные ряда   -  person Pratik Bhat    schedule 03.12.2018


Ответы (1)


Начиная с ag-grid версии `^ 22.1.1 вы можете использовать

В компоненте:

onRowDataUpdated as

gridOptions = {
    onRowDataUpdated: function(){//do something}
}

Используйте gridOptions в шаблоне как

 <ag-grid-angular
     ...
     [gridOptions]="gridOptions"
     ...
  >
  </ag-grid-angular>
person Bal Krishna Jha    schedule 27.05.2020