我正在使用AngularJS的ngGrid模块来显示一些分页的数据。我希望能够跨多个列搜索,但是使用OR搜索。
可以说我有一列带有以下标题:Id,Name,Description。当我搜索时,我想返回ID或名称或说明包含搜索词的所有行。
$scope.pagingOptions = {
pageSizes: [20, 50, 100],
pageSize: 20,
totalServerItems: 0,
currentPage: 1
};
$scope.gridOptions =
{
data: 'myData',
columnDefs: [
{ field: 'id', displayName: 'Id' },
{ field: 'name', displayName: 'Name' },
{ field: 'description', displayName: 'Description' },
{ displayName: 'Actions', cellTemplate: '<input type="button" data-ng-click="doSomething(row.entity)" value="Do Something" />'}],
enablePaging: true,
showFooter: true,
showFilter: true,
pagingOptions: $scope.pagingOptions,
filterOptions: {
filterText: "",
useExternalFilter: false
}
};
我尝试使用默认搜索框,还尝试使用绑定到$ scope.filterText的外部输入框来定义自定义过滤器,例如:
$scope.filterUpdated = function () {
$scope.gridOptions.filterOptions.filterText = 'id:' + $scope.filterText + ';name:' + $scope.filterText + ';description:' + $scope.filterText;
};
但是,这似乎在所有列上都执行了“与”运算。使用ngGrid模块可以实现我想要的吗?
提前致谢,
克里斯
是的,可以做一个OR过滤器,但是在ng-
grid源代码中搜索后,我看不到如何使用它们进行操作filterOptions.filterText
。那只能做AND过滤。
解决方案是然后使用 filterOptions.useExternalFilter:true
我也没有找到它的示例,但是经过一番尝试之后,我发现过滤器实际上是通过重新创建gridOptions.data
对象来完成的。 这是此筛选器的唯一缺点
。
柱塞代码在这里
因此,基本上,您的代码将类似于以下 index.html :
<body ng-controller="MyCtrl">
<strong>Filter Name:</strong> </string><input type="text" ng-model="filterName"/>
</br>
OR
</br>
<strong>Filter Age:</strong> </string><input type="text" ng-model="filterAge"/>
</br>
<button ng-click="activateFilter()">Run Filter</button>
<br/>
<br/>
<div class="gridStyle" ng-grid="gridOptions"></div>
</body>
在你的 controller.js中 :
app.controller('MyCtrl', function($scope) {
$scope.filterOptions = {
filterText: '',
useExternalFilter: true
};
$scope.activateFilter = function() {
var name = $scope.filterName || null;
var age = ($scope.filterAge) ? $scope.filterAge.toString() : null;
if (!name && !age) name='';
$scope.myData = angular.copy($scope.originalDataSet, []);
$scope.myData = $scope.myData.filter( function(item) {
return (item.name.indexOf(name)>-1 || item.age.toString().indexOf(age) > -1);
});
};
$scope.originalDataSet = [{name: "Moroni", age: 50},
{name: "Tiancum", age: 43},
{name: "Jacob", age: 27},
{name: "Nephi", age: 29},
{name: "Enos", age: 34}];
$scope.myData = angular.copy($scope.originalDataSet, []);
$scope.gridOptions = {
data: 'myData',
filterOptions: $scope.filterOptions
};
});
那只是基本过滤(使用正则表达式和/或转换为小写字母以实现更好的匹配)。还要注意,如果name和age均为空,则将name设置为”,然后每个元素在过滤器内都将返回true(导致整个数据集返回)。
此选项更适合于 动态 数据集(由 服务器读取 ),但它的工作原理很好,但可以复制原始数据集并对其应用过滤器。
问题内容: 我有一个MySql表,我想查询其中 成对 的列在特定集中的行。例如,假设我的表格如下所示: 现在,我希望提取其中 (f1,f2) 对为(’a’,30)或(’b’,20)的行,即行2,3,4。我也希望使用“ IN”样式的过滤器来完成此操作,因为我可能有很多对要提取。如果我尝试类似的方法: 我得到IN子句中为f1和f2指定的值的笛卡尔积,即具有f1 =’a’或’b’的所有可能组合的行,以及
问题内容: 我的问题是对该问题的扩展 从ng-grid获取选择行? plunker - http://plnkr.co/edit/DiDitL?p=preview 我需要在页面加载时选择一行,并且需要避免听’ngGridEventData’ 调用$ scope.gridOptions.selectRow(2,true); 由于尚未加载网格,因此控制器主体中的“故障”失败。 避免监听ngGridEv
我试图子集一个熊猫DataFrame在python基于两个逻辑语句 即。 但是第3行的语法无效。 有没有一种方法可以在一行中完成?
问题内容: 我想知道Angular中是否有一种简单的方法,可以使用特定的列(而非逻辑)来过滤表。现在,当我的过滤器实际上只需要过滤2列数据(ID和Name)时,它就会搜索表中的所有内容(10列以上的数据)。 我设法使它仅在过滤时仅查看这两列(通过根据文档在过滤器表达式中使用一个对象并查看此SO答案,但是它使用的是逻辑,太具体了。我想让它使用逻辑,但是遇到了麻烦。 我的HTML 我的过滤逻辑: 过滤
问题内容: 我正在做熊猫分析。 我的表有700万行* 30列。单元格值的范围从-1到3随机。现在,我想根据列的值过滤掉行。 我了解如何根据多个条件进行选择,写下条件并通过“&”“ |”组合。 但是我有30列要过滤,并按相同的值过滤。例如,需要选择最后12列的值等于-1 上面的代码给了我一个布尔值。我需要实际的数据框。 这里的逻辑是“或”,表示如果任何列的值为-1,则需要选择该行。另外,很高兴知道我
问题内容: 要按单列过滤数据帧(df),如果我们考虑男性和女性的数据,则可以: 问题1-但是,如果数据跨越多年并且我只想看2014年的男性,该怎么办? 用其他语言,我可能会做类似的事情: (除了我要执行此操作,并在新的数据框对象中获取原始数据框的子集) 问题2。如何循环执行此操作,并为每个唯一的年份和性别集创建一个数据框对象(例如,2013-男,2013-女,2014-男和2014-女的df 问题