Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

referencing 'this' in ag-grid events

In ag-grid events, e.g. onRowSelected(), 'this' refers to the grid object. However, I need to reference component variables and don't know how to. What I did was this, but it is a hack:

initializeGridOptions() {
    this.gridOptions = {
      columnDefs: [
        { headerName: "Core #", field: "coreNumber", width: 100, sort: 'asc' },
      onRowSelected: this.onRowSelected,
    }
    this.gridOptions['_this'] = this;  // HACK
  }

  onRowSelected(event: any) {
    if (event.node.selected) {
      (this as any)._this.selectedNode = event.node.data;
    }
  }

Is there a better way?

like image 503
user441058 Avatar asked Oct 17 '25 06:10

user441058


1 Answers

Enumerating the various ways you could solve this problem -
1. Use of arrow function:

   onRowSelected : (event: any) => { ... }

2. Use of bind() :

onRowSelected: this.onRowSelected.bind(this)
This approach is useful if your onRowSelected is tightly coupled to your component and it is meant to be used only with that grid.

3.Use of ag-grid context gridOption:

However if you would want to share a single function across many grids and lets say have this function in a grid utility service.
Then you can use the below approach. In gridOptions, use the context option

gridOptions = { context : {parentComponent: this}...}
and onRowSelected: this.gridUtilityService.onRowSelected

Within onRowSelected you can access context using :
const ctx = params.context.parentComponent to reference component varibles

like image 170
Pratik Bhat Avatar answered Oct 19 '25 22:10

Pratik Bhat



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!