Monday, 14 March 2016

ag-grid API Undefined in Angular 2



I am using the ag-grid API in an Angular 2 app, inside the ngOnInit method.



In the onGridReady event like mentioned in this post, the API is accessible and things work fine.



However, I need to call the API in one of the following methods as well:




  • onRowDataChanged

  • onNewColumnsLoaded

  • onModelUpdated



This is not working because the API is undefined. In addition, for some reason I can also call the API in the onCellDoubleClicked and onCellClicked events.



This seem to be a bug. Does anyone know what is going on?



Please see the code bellow:



ngOnInit() {

this.gridOptions = {

onGridReady: function (param) {
param.api.sizeColumnsToFit(); // works fine
},

onCellDoubleClicked: function (param) {
param.api.sizeColumnsToFit(); // works fine
},

onRowDataChanged: function (param) {
param.api.sizeColumnsToFit(); // API is undefined
},
};
}

Answer



Alright, here is how I got it working.




  • First, capture the this reference for your angular component just to make sure that you will not have JavaScript scoping issues.


  • Then, capture the API reference when it is available inside the onGridReady event


  • Lastly, only call the API after the stack is empty, deferring all the API calls with the setTimeout function




So now the code looks more or less like this:



...
let self = this;
...
onGridReady: function (param) {
self.api = param.api;
},

onRowDataChanged: function (param) {
setTimeout(() => {
self.api.sizeColumnsToFit()
...more API calls...
}, 0);
},
...

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...