从单元格模板中搜索文本在 ui-grid 中不起作用
Search text from cell template not working in ui-grid
我已经为其中一列定义了条件单元格模板。它可以正确显示数据,但我无法在单元格模板中搜索文本。
这是我的笨蛋:
https://plnkr.co/edit/TDX5jtPord1hkzCVaw3L?p=preview
var template1 = '<div class="">' +
'<div class="" ng-if="COL_FIELD > 30">Greater </div> ' +
'<div class="" ng-if="COL_FIELD < 30"> Lesser </div> ' +
'</div>';
在模板中我设置了条件...如果 COL_FIELD > 30 则写 Greater.. 否则写 Lesser。现在我应该可以在数字列中搜索更大或更小了。
一种解决方案是在您的数据上添加 属性,例如:
$http.get('data.json').success(function(data) {
data.map(function(item) {
item.greaterLesser = item.amount > 30 ? 'Greater' : 'Lesser';
});
$scope.gridOptions.data = data;
});
然后不使用模板金额,只需绑定此 属性。
$scope.gridOptions = {
enableFiltering: true,
columnDefs: [{
field: 'name',
width: 70
}, {
field: 'greaterLesser',
name: 'Number',
width: 90,
}, {
field: 'amount',
name: 'Currency',
cellFilter: 'currencyFilter:this',
}]
};
编辑
如果要使用模板,可以自己实现搜索功能。您可以将 filter
选项添加到您的字段并实现 condition
功能。类似于:
filter: {
condition: function(searchTerm, cellValue) {
var value = cellValue > 30 ? 'greater' : 'lesser';
var result = value.search(searchTerm.toLowerCase());
return result > -1;
}
}
我在这里使用了 search
函数,但您可以使用 match
或其他一些函数。
这是一个demo plunker
我使用下面的代码来进行搜索
field: 'EmpId',
displayName: 'Employee Type',
cellTemplate: '<div style="cursor:pointer" class="ui-grid-cell-contents">{{grid.appScope.GetEmployeeType(row)}}</div>',
filter: {
condition: function (searchTerm, cellValue,row,column) {
var value = $scope.GetEmployeeType(row);//same function that you use to display value in cell Template
return (value.toLocaleLowerCase().indexOf(searchTerm.toLocaleLowerCase())>-1);
}
}
我已经为其中一列定义了条件单元格模板。它可以正确显示数据,但我无法在单元格模板中搜索文本。 这是我的笨蛋: https://plnkr.co/edit/TDX5jtPord1hkzCVaw3L?p=preview
var template1 = '<div class="">' +
'<div class="" ng-if="COL_FIELD > 30">Greater </div> ' +
'<div class="" ng-if="COL_FIELD < 30"> Lesser </div> ' +
'</div>';
在模板中我设置了条件...如果 COL_FIELD > 30 则写 Greater.. 否则写 Lesser。现在我应该可以在数字列中搜索更大或更小了。
一种解决方案是在您的数据上添加 属性,例如:
$http.get('data.json').success(function(data) {
data.map(function(item) {
item.greaterLesser = item.amount > 30 ? 'Greater' : 'Lesser';
});
$scope.gridOptions.data = data;
});
然后不使用模板金额,只需绑定此 属性。
$scope.gridOptions = {
enableFiltering: true,
columnDefs: [{
field: 'name',
width: 70
}, {
field: 'greaterLesser',
name: 'Number',
width: 90,
}, {
field: 'amount',
name: 'Currency',
cellFilter: 'currencyFilter:this',
}]
};
编辑
如果要使用模板,可以自己实现搜索功能。您可以将 filter
选项添加到您的字段并实现 condition
功能。类似于:
filter: {
condition: function(searchTerm, cellValue) {
var value = cellValue > 30 ? 'greater' : 'lesser';
var result = value.search(searchTerm.toLowerCase());
return result > -1;
}
}
我在这里使用了 search
函数,但您可以使用 match
或其他一些函数。
这是一个demo plunker
我使用下面的代码来进行搜索
field: 'EmpId',
displayName: 'Employee Type',
cellTemplate: '<div style="cursor:pointer" class="ui-grid-cell-contents">{{grid.appScope.GetEmployeeType(row)}}</div>',
filter: {
condition: function (searchTerm, cellValue,row,column) {
var value = $scope.GetEmployeeType(row);//same function that you use to display value in cell Template
return (value.toLocaleLowerCase().indexOf(searchTerm.toLocaleLowerCase())>-1);
}
}