ag-grid列搜索不使用object作为单元格值

时间:2017-05-10 12:52:39

标签: angularjs ag-grid

我正在使用cell_renderer来定义我的单元格,如下所示:

        var cell_renderer = function(params) {
            var element = "";
            var values = params.value;
                angular.forEach(values, function(each_param){
                    element += '<a href="#/workunit/' + each_param.id + '" target="_blank">' + each_param.id +
                            '<span class="text-danger text-bold">'+
                            '<span class="" title="' + inactive_message +
                            '">' + inactive_flag + ' </span>' +
                            '<span class="" title="' + misconfigured_message +
                            '"> ' +misconfigured_flag + '</span>'+
                            '</span></a><br>';
                })
            return element;
        };

我的专栏定义是:

                var testObject = {};
                testObject.headerName = "my header";
                testObject.field = each_branch;
                testObject.width = 200;
                testObject.cellClassRules = cell_class_rules;
                testObject.cellRenderer = cell_renderer;
                columnDefs.push(testObject);

这里testObject.field = each_branch,是一个json对象。

因此,内置搜索功能无法在ag-grid中运行。谁能在这里帮助我。

4 个答案:

答案 0 :(得分:1)

默认情况下,来自Ag-grid的textFormatter返回一个字符串表示,如果你包含textFormatter并在textCustomComparator中返回相同的对象,你将获得valueGetter中的对象:

   filter: "agTextColumnFilter",
filterParams: {
    textCustomComparator: function  (filter, value, filterText) {
        //value is the object from valueGetter
    },
    textFormatter: function(r) { 
        //this is the solution
        return r; 
    }, 
    valueGetter: function getter(params) {
        return {
            ...
        };
    }
}

答案 1 :(得分:0)

尝试在列上设置文本过滤器属性:

testObject.filter:'text',
testObject.filterParams:{
...
}

然后在filterParams对象中实现 textCustomComparator 函数:

https://www.ag-grid.com/javascript-grid-filter-text/#gsc.tab=0

答案 2 :(得分:0)

解决方案是在过滤器参数中提供valueGetter

例如,您有{ name: 'Some Name', id: 1 }。在这种情况下,您要按名称过滤。所以:

{
  filter: 'agTextColumnFilter',
  filterParams: {
    valueGetter: params => {
      return params.data.name
    }
  }
}

答案 3 :(得分:0)

使用作为对象的列时,至少有两个选项:

  1. 在列上指定一个valueGetter函数。如果这样做,表将不再包含对象,而是包含valueGetter返回的值。

    valueGetter:this.getDateValueGetter(“ dateCol”)

    private getDateValueGetter(col:string):函数{ 返回函数(p:ValueGetterParams){ 如果(!p.data){ 返回null; } 返回this.ui.convertStringToDate(p.data [col],“ YYYY-MM-DD”); } }

  2. 如果希望表包含对象,请在列上同时指定keyCreator函数和valueFormatter函数。如果这样做,列,过滤器和分组将按预期工作。

    {keyCreator:(param)=> {return param.value}, valueFormatter :(参数)=> {返回参数值} }