Редакторы ячеек Ag-grid с динамическими параметрами: используйте глобальную переменную

#javascript #angular #scope #ag-grid #ag-grid-angular

#javascript #angular #область видимости #ag-сетка #ag-grid-angular

Вопрос:

Я только начал использовать ag-grid в одном из своих проектов, и я использую редактор ячеек «agSelectCellEditor» для двух столбцов: «функция» и «project_role». Выбор параметров для столбца роли проекта зависит от значения ячейки функции. Это конфигурация сетки:

 <ag-grid-angular
        class="ag-theme-balham"
        style="height: calc(100% - 100px)"
        [defaultColDef]="demandsDefaultColDef"
        (gridReady)="onDemandsGridReady($event)"
        (cellValueChanged)="onDemandsCellValueChanged($event)"
        [frameworkComponents]="frameworkComponents"
      >
        <ag-grid-column headerName="Resource Description" headerClass="test">
          <ag-grid-column
            field="function"
            [cellEditor]="'agSelectCellEditor'"
            [cellEditorParams]="functionOptions"
            [sortable]="true"
            [pinned]="true"
            [width]="140"
          ></ag-grid-column>
          <ag-grid-column
            field="project_role"
            headerName="Project Role"
            [cellEditor]="'selectEditor'"
            [cellEditorParams]="projectRoleCellEditorParams"
            [sortable]="true"
            [pinned]="true"
            [width]="140"
          ></ag-grid-column>
 <ag-grid-angular/>
 

Я следовал документации для реализации «Динамических параметров«.:

 projectRoleCellEditorParams(params){
    const selectedFunction = this.functions.find(x => x.name === params.data.function);
    const allowedProjectRoles = selectedFunction.projectRoles.map(x => x.name);
    return {
      values: allowedProjectRoles,
    };
  }
 

Проблема в том, что «это» не определено. Я знаю, что это проблема, которая связана с областью действия javascript. Каким-то образом мне нужно предоставить «это» в область projectRoleCellEditorParams.
Но как я могу это сделать?

Ответ №1:

Я нашел ответ сам. Вы можете использовать объект контекста.

Установите что-то в контекст:

   onDemandsGridReady(params): void {
    this.demandsGridApi = params.api;
    this.demandsGridApi.context.functions = this.functions;
  }
 

Используйте ее в функции:

  const selectedFunction = params.api.context.functions.find(
      (x) => x.name === params.data.function
    );