Angular ag-Grid: как автоматически создать шаблон по умолчанию для ячейки, но с другим именем поля? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть ag-grid, когда у многих столбцов есть определенные c шаблоны. Но некоторые данные, которые я помещаю в таблицу, до сих пор были не чем иным, как просто текстом. Я хочу добавить что-то большее для случая по умолчанию:

<ng-template #defaultRecord let-record>
  ADDITIONAL THINGS HERE
  <!-- CHOOSEN FIELD HERE -->
</ng-template>

Итак, у меня есть метод для автоматической генерации столбцов:

  private generateColumn(headerNameKey: string, colId: string, ngTemplate: TemplateRef<any>, filter = true, sortable = true, field?: string) {
  const headerName = headerNameKey ? this.translateService.instant(headerNameKey) : '';
  return {
  headerName,
  field,
  sortable,
  filter,
  colId,
  cellRendererFramework: CellRendererComponent,
  cellRendererParams: {
    ngTemplate
  }
};
}

И я не знаю, как использовать неуказанное поле в шаблоне. Например, я получаю данные API, когда поле называется «XYZ», как сделать так, чтобы оно отображалось в моем шаблоне по умолчанию?

В этом случае:

<ng-template #defaultRecord let-record>
  ADDITIONAL THINGS HERE
  <span> Value of XYZ param</span>
</ng-template>

Может кто-нибудь мне помочь? Спасибо!

РЕДАКТИРОВАТЬ 1:

Пользовательский компонент CellRenderer:

export class CellRendererComponent implements ICellRendererAngularComp {
  template: TemplateRef<any>;
  templateContext: { $implicit: any, params: ICellRendererParams };

  agInit(params: ICellRendererParams) {
    this.template = params['ngTemplate'];
    this.refresh(params);
  }

  refresh(params: ICellRendererParams): boolean {
    this.templateContext = {
      $implicit: params.data,
      params
   };
    return true;
  }
}

И как выглядит параметр в методе agInit: enter image description here

И как вы можете видеть на картинке, в шаблоне я хочу отобразить значение Fields.Date param, определяемое полем. Как я предполагаю использовать его в шаблоне выше?

1 Ответ

1 голос
/ 17 апреля 2020

если я правильно понимаю, что вы хотите сделать. Тогда вот один из способов.

Вы добавляете параметр контекста в контекст шаблона.

<ng-template #defaultRecord let-record let-value="value">
    ADDITIONAL THINGS HERE
    <span> {{value}} </span>
</ng-template>

И вычисляете это значение в компоненте рендерера.

refresh(params: ICellRendererParams): boolean {
    const valuePath = params.colDef.field;
    const value = _.get(params.data, valuePath); // using lodash
    this.templateContext = {
        $implicit: params.data,
        params,
        value
    };
    return true;
}

Я используя функцию loda sh, но вы можете использовать другую библиотеку или написать простой метод для получения значения из объекта, используя его путь.

...