为 Angular ui 网格实施外部过滤器的方便方法是什么
What could be convenient way to implement filter external for Angular ui grid
在第 50 行的 source code 处说:
/**
* @ngdoc event
* @name filterChanged
* @eventOf ui.grid.core.api:PublicApi
* @description is raised after the filter is changed. The nature
* of the watch expression doesn't allow notification of what changed,
* so the receiver of this event will need to re-extract the filter
* conditions from the columns.
*
*/
this.registerEvent( 'core', 'filterChanged' );
在我的例子中,我有 people table
三列,分别是 Name
、Surname
和 Email
。我可以处理 filterChanged:
vm1.gridApi.core.on.filterChanged($scope, function () {
....
}
将我的所有参数发送到服务器端并在所有字段中搜索。
这可能适用于少数列。 See plunker
对于巨大的table在客户端有什么方便的处理方式?
在@PaulL 的回答的帮助下,我得到了这个解决方案:
vm.gridApi.core.on.filterChanged($scope, function () {
var grid = vm.gridApi.grid;
var filters = [];
vm.gridApi.grid.columns.forEach(function (column) {
if (column.filters && column.filters[0].term) {
filters[column.name] = column.filters[0].term;
};
});
console.log(filters);
service.getEntries(filters, paginationOptions.pageNumber, paginationOptions.pageSize, paginationOptions.sortDir).
then(function (result) {
vm.gridOptions.data = result.data.value;
})
});
通常我会使用以下方法提取它们:
var filters = [];
$scope.gridApi.grid.columns.forEach( function(column) {
if( column.filters && column.filters.length > 0 ) {
filters.push({name: column.name, filters: column.filters});
};
});
然后您可以在发送到服务器之前适当地处理这些过滤器。我通常也会对过滤器进行去抖动,你不想每次按键都调用服务器。
在第 50 行的 source code 处说:
/**
* @ngdoc event
* @name filterChanged
* @eventOf ui.grid.core.api:PublicApi
* @description is raised after the filter is changed. The nature
* of the watch expression doesn't allow notification of what changed,
* so the receiver of this event will need to re-extract the filter
* conditions from the columns.
*
*/
this.registerEvent( 'core', 'filterChanged' );
在我的例子中,我有 people table
三列,分别是 Name
、Surname
和 Email
。我可以处理 filterChanged:
vm1.gridApi.core.on.filterChanged($scope, function () {
....
}
将我的所有参数发送到服务器端并在所有字段中搜索。
这可能适用于少数列。 See plunker
对于巨大的table在客户端有什么方便的处理方式?
在@PaulL 的回答的帮助下,我得到了这个解决方案:
vm.gridApi.core.on.filterChanged($scope, function () {
var grid = vm.gridApi.grid;
var filters = [];
vm.gridApi.grid.columns.forEach(function (column) {
if (column.filters && column.filters[0].term) {
filters[column.name] = column.filters[0].term;
};
});
console.log(filters);
service.getEntries(filters, paginationOptions.pageNumber, paginationOptions.pageSize, paginationOptions.sortDir).
then(function (result) {
vm.gridOptions.data = result.data.value;
})
});
通常我会使用以下方法提取它们:
var filters = [];
$scope.gridApi.grid.columns.forEach( function(column) {
if( column.filters && column.filters.length > 0 ) {
filters.push({name: column.name, filters: column.filters});
};
});
然后您可以在发送到服务器之前适当地处理这些过滤器。我通常也会对过滤器进行去抖动,你不想每次按键都调用服务器。