代码之家  ›  专栏  ›  技术社区  ›  marc_s

AG网格:根据条件在网格中显示某些“操作”按钮

  •  0
  • marc_s  · 技术社区  · 5 年前

    我现在面临的挑战是:我有一个相当简单的数据结构,其中一个列表绑定到网格以供显示。根据它的值,我想在网格中添加一个“Actions”列,让用户可以访问某些操作,例如删除条目,“升级”条目等等。

    对于单个数据绑定列,我在绑定时获取每行的相应数据值,例如,我可以使用 . 我希望我能做一些类似于我的“Actions”列(它没有绑定到类的特定数据元素)的事情,但是我的“action cell renderer”似乎没有任何决策依据。

    export interface Indicator {
        Id: string;
        Name: string;
        IsGlobal: boolean;
    }
    

    Indicators 将被绑定到 OnInit 角分量的函数。

    columnDefs = [
        { headerName: 'Name', field: 'Name', width: 200, editable: true },
        { headerName: 'Global', field: 'IsGlobal', editable: false, width: 100,
          cellRenderer: (data) => { 
            // here, "data" refers to the "IsGlobal" value of the row being displayed
            if (data.value === true) {
              return 'Ja';
            } else {
              return 'Nein';
            }
          },
        },
        { headerName: 'Actions', width: 125,
            cellRenderer: (data) => {
                // here, I was hoping the "data" would refer to the entire
                // row / object being bound, so that I could check for 
                // certain conditions to be true (or false)
                if (data.IsGlobal.value === true) 
                {
                    return '<span class="far fa-trash-alt mr-2" title="Delete entry"></span>' +
                           '<span class="fab fa-nintendo-switch" title="Promote entry"></span>';
                }      
                else
                {
                    return '<span class="far fa-trash-alt mr-2" title="Delete"></span>';
                }
            }
        }
      ];
    

    我希望能够在我的列定义中定义我的操作列显示一个“升级条目”按钮 当前有问题的行的数据已被删除 IsGlobal = false data 传递到单元渲染器的将是整行数据对象(类型 Indicator )-但事实似乎并非如此。

    如何决定在“操作”列和“我的列定义”中显示哪些图标?

    1 回复  |  直到 5 年前
        1
  •  9
  •   un.spike    4 年前

    cellRenderer params

    interface ICellRendererParams {
        value: any, // value to be rendered
        valueFormatted: any, // value to be rendered formatted
        getValue: ()=> any, // convenience function to get most recent up to date value
        setValue: (value: any) => void, // convenience to set the value
        formatValue: (value: any) => any, // convenience to format a value using the columns formatter
        data: any, // the rows data
        node: RowNode, // row rows row node
        colDef: ColDef, // the cells column definition
        column: Column, // the cells column
        rowIndex: number, // the current index of the row (this changes after filter and sort)
        api: GridApi, // the grid API
        eGridCell: HTMLElement, // the grid's cell, a DOM div element
        eParentOfValue: HTMLElement, // the parent DOM item for the cell renderer, same as eGridCell unless using checkbox selection
        columnApi: ColumnApi, // grid column API
        context: any, // the grid's context
        refreshCell: ()=>void // convenience function to refresh the cell
    }
    

    所以要进入 row-data 你需要使用 params.data params.node.data

    cellRenderer: (params) => {
        if (params.data.IsGlobal.value === true) 
        {
            ...
        }      
        else
        {
            ...
        }
    }
    

    但是记住 ,此时将使用内联 单元渲染器 - 你可以实现 HTML 模板 它将包含所需的函数等等。

    你就不能执行了 component 功能通过 内联实现