VueJS - 如何在 ag-grid-vue 中拥有 columnDefs 的自定义 headerName

Posted

技术标签:

【中文标题】VueJS - 如何在 ag-grid-vue 中拥有 columnDefs 的自定义 headerName【英文标题】:VueJS - How to have a custom headerName of columnDefs in ag-grid-vue 【发布时间】:2021-05-06 16:52:12 【问题描述】:

我正在尝试在新行中显示我的标题名称,但我无法做到。

ag-grid-vue 版本:6.12.0

这是我尝试过的,但没有成功:

defaultColDef: 
        sortable: true,
        editable: true,
        resizable: true,
        suppressMenu: true
      ,
columnDefs: [
  
    headerName: 'Average low ',  // This value is displayed in a single line
    field: 'average_low',
    width: 200,
  ,
  
    headerName: 'Average high ', // Even this value is displayed in a single line
    field: 'average_high',
    width: 200,
  ,
...

我尝试了这样的方法来在新行中显示 headerName:

      
        headerName: 'Avg. \n low ',  // This value is displayed in a single line
        field: 'average_low',
        width: 200,
      ,
      
        headerName: 'Avg. </br> high ', // Even this value is displayed in a single line
        field: 'average_high',
        width: 200,
      ,

我想显示如下内容:

请告诉我如何做到这一点。这是官方文档:

https://www.ag-grid.com/documentation/vue/component-header/

这是显示示例并可用于锻炼的 plunker:

https://plnkr.co/edit/QGopxrvIoTPu2vkZ

【问题讨论】:

【参考方案1】:

编辑:这是一个可行的解决方案 >> https://plnkr.co/edit/Lr6cneCFiT91lCOD 使用相应的主题(alpinebalham 等)和您希望的高度或您拥有的任何其他 CSS 结构使其适应您的喜好。 如下所述,这受到this guy's work 的启发。

可以使用下面的脚本完成一个可行的解决方案

const MIN_HEIGHT = 80; // this line is the one you're looking for ! 

function autosizeHeaders(event) 
    if (event.finished !== false) 
        event.api.setHeaderHeight(MIN_HEIGHT);
        const headerCells = document.querySelectorAll('#myGrid .ag-header-cell-label');
        let minHeight = MIN_HEIGHT;
        headerCells.forEach(cell => 
            minHeight = Math.max(minHeight, cell.scrollHeight);
        );
        event.api.setHeaderHeight(minHeight);
    


(function() 
    document.addEventListener('DOMContentLoaded', function() 
        var gridDiv = document.querySelector('#myGrid');
        var gridOptions = 
            enableColResize: true,
            enableSorting: true,
            onColumnResized: autosizeHeaders,
            onGridReady: autosizeHeaders,
            columnDefs: [
                
                    headerName: 'Header with a very long description',
                    field: 'name',
                    headerClass: 'multiline'
                ,
                
                    headerName: 'Another long header title',
                    field: 'role',
                    headerClass: 'multiline'
                
            ],
            rowData: [
                name: 'Niall', role: 'Developer',
                name: 'Eamon', role: 'Manager',
                name: 'Brian', role: 'Musician',
                name: 'Kevin', role: 'Manager'
            ]
        ;
        new agGrid.Grid(gridDiv, gridOptions);
    );
)();

有一个 github 问题 here 与 *** 线程有很多 hacky(但有效)解决方案。似乎没有对此的官方支持,所以最好的办法是检查那里并尝试各种 CSS 解决方案。

如果您有一个我们可以使用的托管示例,我可能会提供更多帮助,但现在,我只能推荐阅读各种 cmets 并尝试使用您的开发工具修改 CSS! :)

【讨论】:

ag-grid.com/documentation/vue/column-definitions这里你可以找到例子,请你试试,我尝试了各种其他方法但没有成功 链接项目为空 如果您在该页面下方找到示例,您实际上可以使用 plunker 进行锻炼,这是链接ag-grid.com/documentation/vue/column-definitions 并不是我所谓的友好调试方式。将其托管在代码沙箱中,它也会更接近您将拥有的。 plnkr.co/edit/QGopxrvIoTPu2vkZ 这是在 vue 中

以上是关于VueJS - 如何在 ag-grid-vue 中拥有 columnDefs 的自定义 headerName的主要内容,如果未能解决你的问题,请参考以下文章

从 cellrenderer 调用父函数,例如在 vuejs ag-grid-vue 上发出

无法在 Vuejs 中访问 ag-Grid API

ag-grid-vue:如何检测行点击?

为啥没有使用 vuejs 将新行添加到 ag-grid?

AG-grid Vue 不适用于 vuejs 版本 3

ag-grid-vue 不呈现表格