Ag-grid 单元格使用 function() 渲染 html 或模板

Posted

技术标签:

【中文标题】Ag-grid 单元格使用 function() 渲染 html 或模板【英文标题】:Ag-grid cell Render html or template with function() 【发布时间】:2021-08-31 02:45:48 【问题描述】:

单击时我正在渲染单元格模板,它应该执行一些功能。我的波纹管代码不起作用。提前致谢

             
                field: "expiry_date",
                headerName: "End date"
              ,
                field:"Reserved Date",
               // template: `<p (click)='open()'>Reserve Date</p>`,
               cellRenderer: function (params) 
                var html = `<p (click)=$this.open(params.data)'>Reserve Date</p>`;
        
                return html;
            

【问题讨论】:

请同时包含您遇到的错误。 我没有收到错误。但由于实施错误,它对我不起作用 【参考方案1】:

我们可以在ag-grid库的cellRendererParams的帮助下绑定方法和它的标签。

你可以像下面这样,

        
            field: "expiry_date",
            headerName: "End date"
        ,
        
            field:"Reserved Date",
            cellRendererParams: 
                    onClick: this.open.bind(this),
                    label: 'Reserve Date'
            
        

您可以在此处阅读有关 cellRenderParams 的更多信息:component-cell-renderer

【讨论】:

请在附件中探索更多可能的方法来解决您的问题。【参考方案2】:

您需要创建一个新的 cellRendererComponent。 像这样的:

import  Component  from '@angular/core';
import  ICellRendererAngularComp  from 'ag-grid-angular';
import  ICellRendererParams, IAfterGuiAttachedParams  from 'ag-grid-community';


@Component(
  selector: 'cpl-button-renderer',
  template: `
    <button type="button" (click)="onClick($event)">label</button>
    `,
    styles: []
)

export class ButtonRendererComponent implements ICellRendererAngularComp 

  params;
  label: string;

  agInit(params): void 
    this.params = params;
    this.label = this.params.label || null;
  

  refresh(params?: any): boolean 
    return true;
  

  onClick($event) 
    if (this.params.onClick instanceof Function) 
      // put anything into params u want pass into parents component
      const params = 
        event: $event,
        rowData: this.params.node.data
        // ...something
      
      this.params.onClick(params);

    
  

从父组件,需要添加到aggrid的framework对象中,并在columnDefs中提供:

ngOnInit() 
        this.frameworkComponents = 
            buttonRenderer: ButtonRendererComponent,
        
    

列定义:

       
            headerName: 'Button Demo',
            cellRenderer: 'buttonRenderer',
            cellRendererParams: 
                onClick: this.open.bind(this),
                label: 'Reserve Date'
            
        ,

像这样添加打开函数:

private open(params) 
    // do whatever you want.
    // Params will contain the oject that you passed in .onclick method of renderer component     

HTML 文件:

<ag-grid-angular style="height: 450px;" class="ag-theme-alpine" [rowData]="rowData"
            [columnDefs]="columnDefs" [defaultColDef]="defaultColDef" (gridReady)="onGridReady($event)"
            [frameworkComponents]="frameworkComponents">
</ag-grid-angular>

【讨论】:

以上是关于Ag-grid 单元格使用 function() 渲染 html 或模板的主要内容,如果未能解决你的问题,请参考以下文章

ag-Grid,使用材质图标进行单元格渲染 - vue

React 中的 Ag-grid 纯 JS 单元格渲染器

如何在 ag-grid 中的单元格中使用和添加图标以指示该单元格是可编辑的

Ag-grid 高亮单元格逻辑无法正常工作

如何禁用 ag-grid 中的单元格选择?

AG-Grid:如何根据同一行中其他单元格中的值更改单元格的颜色