So I'm trying to setup ag-grid and I can't get one thing to work. I want to have a column that is actions. Then I want it to have a link or button that triggers a method in the component file.
For the column def I have the following. What am I doing wrong?
{
headerName: 'Actions',
cellRenderer: params => {
return `<a (click)="onEditClick("${params.data.hostname}")">Edit</a>`;
}
}
You can also implement the checkbox renderer using JavaScript. In this case, the checkbox renderer is constructed using a JavaScript Class. An input element is created in the ag-Grid init lifecycle method (required) and it's checked attribute is set to the underlying boolean value of the cell it will be rendered in.
By default the grid will create the cell values using simple text. If you want more complex HTML inside the cells you can achieve this using Cell Renderers.
I use cellRenderFramework:
{
headerName: '', width: 30,
cellRendererFramework: ActionCellRendererComponent,
cellRendererParams: {
icon: 'fa-download',
action: this.downloadAttachmentAction
}
}
and than I have custom Component
@Component({
selector: 'cu-download-link-cell-renderer',
template: `
<div class="text-center">
<i class="fa {{params.icon}}" (click)="onClick()" aria-hidden="true"></i>
</div>`
})
export class ActionCellRendererComponent {
params;
constructor() {
}
agInit(params): void {
this.params = params;
if (_.isNil(params.action)) {
throw new Error('Missing action parameter for ActionCellRendererComponent');
}
}
onClick(): void {
this.params.action(this.params);
}
}
export type CellAction = (params) => void;
Use cellRendererFramework to add action Buttons.
App.component.ts
columnDefs = [
{ headerName: 'First Name', field: 'firstName', sortable: true, filter: true },
{ headerName: 'Last Name', field: 'lastName', sortable: true, filter: true },
{ headerName: 'Email', field: 'email', sortable: true, filter: true },
{ headerName: 'User Name', field: 'userIdName', sortable: true, filter: true },
{ headerName: 'Role', field: 'role', sortable: true, filter: true },
{ headerName: 'Actions', field: 'action', cellRendererFramework: CellCustomComponent }];
rowData: any;
ngOnInit() {
const empDatas = localStorage.getItem('user');
const finalData = JSON.parse(this.empDatas);
this.rowData = this.finalData;
}
In the above code, we can see CellCustomComponent. Create that component & add the buttons.
cell-custom.component.html
<button type="button" class="btn-success" (click)="editRow()">Edit</button>
<button type="button" class="btn-success" (click)="viewRow()">View</button>
Now in the cell-custom.component.ts add the functions
cell-custom.component.ts
export class CellCustomComponent implements OnInit {
data: any;
params: any;
constructor(private http: HttpClient, private router: Router) {}
agInit(params) {
this.params = params;
this.data = params.value;
}
ngOnInit() {}
editRow() {
let rowData = this.params;
let i = rowData.rowIndex;
console.log(rowData);
}
viewRow() {
let rowData = this.params;
console.log(rowData);
}
}
After this we need to add this component in App.module.ts
app.Module.ts
@NgModule({
declarations: [AppComponent, CellCustomComponent],
imports: [
BrowserModule,
AppRoutingModule,
FormsModule,
HttpClientModule,
AgGridModule.withComponents([AppComponent])
],
providers: [],
entryComponents: [CellCustomComponent],
bootstrap: [AppComponent]
})
export class AppModule {}
Now we can trigger a method in the component file using Button.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With