Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 基于选择和输入值的过滤器_Angularjs_Search_Filter_Ng Repeat_Ng Options - Fatal编程技术网

Angularjs 基于选择和输入值的过滤器

Angularjs 基于选择和输入值的过滤器,angularjs,search,filter,ng-repeat,ng-options,Angularjs,Search,Filter,Ng Repeat,Ng Options,好吧,我遗漏了一些东西。基本上我有一个网格。上面是一个搜索/过滤条,我允许搜索所有数据,但我也试图让它们将搜索输入定位到数据集中的特定列 <label>Search: </label> <input id='searchTerm' ng-model='searchTerm'/> <label>Filter: </label> <select id='filterKey'ng-model="filterList"> <o

好吧,我遗漏了一些东西。基本上我有一个网格。上面是一个搜索/过滤条,我允许搜索所有数据,但我也试图让它们将搜索输入定位到数据集中的特定列

<label>Search: </label>
<input id='searchTerm' ng-model='searchTerm'/>
<label>Filter: </label>
<select id='filterKey'ng-model="filterList">
<option value='$'>ALL</option>
<option ng-repeat='dKey in dataKeys' value='{{dKey}}'>{{dKey}}</option>
</select>
所有数据都会填充下拉过滤器和网格。。所以

姓、名、年龄、角色、状态 已退休的最新1 First1 23 Mgt 已退役的最新2 First2 24 Mgt 最后3前3 24 Mgt退役 已退役的最新3 First4 22 Mgt 最后5前5 25 Mgt退役

有些情况下,如果选择框设置为“全部”,则它只显示所有行,这些行与搜索输入中键入的内容匹配。搜索Last3将返回:

姓、名、年龄、角色、状态 最后3前3 24 Mgt退役 已退役的最新3 First4 22 Mgt

但如果从fitler下拉列表中选择年龄,并在搜索输入中输入24,则您将得到:

姓、名、年龄、角色、状态 已退役的最新2 First2 24 Mgt 最后3前3 24 Mgt退役

如果在搜索输入中键入Last2,但过滤器设置为yo age,则会得到:

姓、名、年龄、角色、状态

我相信这很简单,因为我在挣扎。我肯定我在上面留下了一些代码,但是请告诉我,我会改正的。网格确实会填充,搜索输入也会工作——我只是不知道如何强制搜索输入只查看特定列。 例如,如果我正在查找24岁的所有人,并且它当前将查找其中包含24岁的任何数据,如电话号码。

若要搜索对象的属性lastName,则过滤器必须为

{
  lastName: 'foo'
}
因此,在控制器中创建一个函数,返回具有选定键和输入值的对象,并将此函数的结果用作过滤器:

$scope.getFilter = function() {
    var result = {};
    result[$scope.filterList] = $scope.searchTerm;
    return result;
}
并且认为:

ng-repeat="list | filter:getFilter()"

您真的应该将filterList重命名为更有意义的名称,如filterKey。

以下是您可以使用的内容。我在选择框中累积了列名。并编写了一个自定义筛选器,以便在选择值时按特定筛选器进行搜索。如果选择“全部”,则它将搜索所有列。希望能有帮助

var-app=angular.module'appX',[]; 应用程序控制器'ctrlX',函数$scope{ $scope.dataSet=[{ 名字:“第一个1”, lastname:“last 1”, 年龄:'24', 性别:'F' }, { 名字:'first2', lastname:“last 2”, 年龄:"21",, 性:'我' }, { 名字:“前3个”, lastname:“最后3个”, 年龄:'24', 性:'我' }, { 名字:'first 4', lastname:“last 4”, 年龄:"26",, 性别:'F' }]; $scope.keyList=[]; angular.forEach$scope.dataSet,functionval,键{ 角度。前视值,函数v,k{ 如果$scope.keyList.indexOfk<0{ $scope.keyList.pushk; } } } } app.filter'mycustomSearch',函数{ 返回函数输入,选项{ if!option.type | |!option.term{ 返回输入; } var结果=[]; 角度。输入,函数值,键{ 如果val[option.type].indexOfoption.term>-1{ 结果:pushval; } } 返回结果; } }; 搜索: 过滤器: 全部的 {{x} {{x.firstname} {{x.lastname} {x.age} {{x.sex}
非常感谢。是的,将使用filterKey。让我暂时试试你写的东西。我很快会回信的,因为这让我发疯。谢谢你,JB。。。你是个救生员。非常感谢,这是非常合乎逻辑的。这简直让我发疯,因为我知道这很容易。非常感谢。@CS不客气。你是新来的,所以我要解释一下:感谢回答你问题的人,并将问题标记为已为其他人回答的方式是,通过单击左侧的灰色勾号来接受答案。是的,第一次在这里发帖。Rep似乎不够高,但我确实点击了它。呃——不得不再等一会儿。这可不是什么好事。现在是马克德。