繁体   English   中英

将单元格渲染应用到网格网格后获取单元格值

[英]Get Cell value after cell rendering applied to it ag-grid

我正在使用ag-grid显示一些信息。

            var grid_column_definitions = [
                {
                    field: "id",
                    headerName: "ID",
                    cellRenderer: function (params) {
                        if (!params.data) return '';
                        return '<a ng-href="#/id/{{data.id}}">{{data.id}}</a>';
                    }
                }
]

我知道我可以使用ag_grid api获取单元格的值:(cell.node.data)

但这返回了我的原始节点。 有没有一种方法可以将单元格渲染器应用于格式化行(html)之后。

好的,所以我找不到从模板获取内容的任何解决方案。 但是我能够使用其他不同的ag-grid API来实现这一目标。 我主要需要创建列的csv超链接。 例如。 如果单元格a是www.example.com/cell_value的超链接,我希望它在csv以及超链接中都存在。

所以这是我的解决方案:

scope.exportData = function(){ // function to export data, in case anyone need this.
  var params = {};
  var params.fileName = "test";
  params.processCellCallback = function(cell){
    return create_csv_link_based_on_column(cell);
  }
  scope.data.api.exportDataAsCsv(params);
}

===============

var create_csv_link_based_on_column(cell){
                var cellRenderer = cell.api.getColumnDef(cell.column.colId).cellRenderer; // get the cell renderer function
                if(cellRenderer){ // if the cell has cellRenderer functiond defined.
                    var cellTemplate = cellRenderer(cell.node); // eg. <a ng-href="#/sample/{{data.id}}">{{data.id}}</a>
                    if(cellTemplate){
                        if(cellTemplate.indexOf("href=") !== -1){ // if the template has hyperlink.
                            try{
                                var link = cellTemplate.split(/"/)[1]; // get the hyperlink. eg. #/sample/{{data.id}}
                                var angularVariable = link.substring(link.lastIndexOf("{")+1,link.indexOf("}")); // eg. data.id
                                var properties = angularVariable.split('.'); // eg. ["data", "id"];
                                var propertyValue = properties.reduce((obj, prop) => obj && obj[prop], cell.node); // eg. cell.node.data.id = 16
                                var finalLink = link.replace("{{"+angularVariable+"}}", propertyValue); // replace angular variable with the data
                                finalLink = base_url + finalLink;
                                var csv_link = finalLink ? '=HYPERLINK("'+finalLink+'", "'+cell.value+'")' : cell.value;
                                return csv_link;
                            }catch(err){ // unexpected case
                                return cell.value;
                            }
                        }
                    }
                }
                return cell.value;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM