Отправить событие из cellRendererFramework в родительский

С помощью ag-grid вы можете определить свой GridOptions.columnDefs с помощью информации столбца, включая cellRendererFramework. У меня есть компонент, который я использую для cellRendererFramework, который включает событие, которое запускается при нажатии кнопки в его шаблоне. Я хотел бы иметь возможность передать это событие родителю (где определяются columnDefs и откуда инициализируется ag-grid-angular).

Я вижу, что я мог бы просто позволить событию пройти через событие ag-grid-angular's cellClicked... а затем я мог бы просмотреть событие, чтобы проанализировать информацию, такую ​​​​как цель события, и посмотреть, находится ли оно на кнопке и т. д.... но я Я надеюсь, что мне не придется этого делать, и что есть способ получить событие из компонента cellRendererFramework ts, up.


Мой GridOption.columnDefs def для этой колонки выглядит так:

{
  headerName: 'Actions',
  cellRendererFramework: ActionCellComponent,
  suppressFilter: true,
}

ActionCellComponent имеет шаблон с кнопками, которые имеют события нажатия, такие как (click) = "actions.deleteSchema($event)", и подбираются в компоненте ts.

Я надеюсь получить события от ActionCellComponent к AdminComponent, в котором размещены ag-grid и columnDefs, без необходимости анализировать событие cellClicked.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
9
0
3 954
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

import {GridOptions} from "ag-grid";
constructor(){ 
    this.gridOptions = <GridOptions>{
        context: {
            componentParent: this
        }
    };
} 

Убедитесь, что при рисовании сетки в HTML

<ag-grid-angular #grid-reference [gridOptions] = "gridOptions">

Затем в свой cellRenderer включите agInit, который будет срабатывать при отрисовке класса.

public params;

public agInit(params: any): void {
    this.params = params;

    console.info(this.params.context.componentParent); 
    // access to parent functions / variables etc
}

Итак, например, после события, если у вас есть public hello: string в родительском элементе, вы можете сделать следующее ниже.

this.params.context.componentParent.hello = "hi"; // could be function call.

Затем это должно позволить вам делать то, что вам нужно, для взаимодействия между ними. Контекст привязан.

Надеюсь, это то, что вы ищете.

Вот документация ag-grid.

идеально, немного отличается от того, как я думал .. но делает то, что мне нужно. Спасибо

Dallas 02.05.2019 21:20

Да, вероятно, есть и другие способы, это сработало для меня, поэтому я решил поделиться :-)

Dince12 02.05.2019 21:21

Это именно то решение, которое я искал. Спасибо, что поделились!

omostan 26.08.2020 07:59

Совершенно никаких проблем :-)

Dince12 26.08.2020 10:08

Это здорово! Вы сэкономили мне часы... на самом деле, я бы, наверное, сдался.

eh1160 03.02.2022 00:19

рад, что это все еще удобно несколько лет спустя :-)

Dince12 03.02.2022 10:17

Другие вопросы по теме