Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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 strict filter字段为空时如何显示所有值?_Angularjs_Html Table_Angularjs Ng Repeat - Fatal编程技术网

AngularJS strict filter字段为空时如何显示所有值?

AngularJS strict filter字段为空时如何显示所有值?,angularjs,html-table,angularjs-ng-repeat,Angularjs,Html Table,Angularjs Ng Repeat,我有一个表,它可以被几个列过滤。过滤器是严格的。启动数据时,它会显示所有值。但是,在按某个列进行筛选并返回到empty选项以显示所有值之后,它将显示一个空表。如何仅对非空值应用严格筛选 <select ng-model="search.column1"> <option value=''></option> <option ng-repeat="e in vm.getExample value="{{e.column1}}">

我有一个表,它可以被几个列过滤。过滤器是严格的。启动数据时,它会显示所有值。但是,在按某个列进行筛选并返回到empty选项以显示所有值之后,它将显示一个空表。如何仅对非空值应用严格筛选

<select
    ng-model="search.column1">
    <option value=''></option>
    <option ng-repeat="e in vm.getExample value="{{e.column1}}">{{e.column1}}</option>
</select> 

<select
    ng-model="search.column2">
    <option value=''></option>
    <option ng-repeat="e in vm.getExample value="{{e.column2}}">{{e.column2}}</option>
</select> 

<table>
    <tr>
        <th>Column1</th>
        <th>Column2</th>
    </tr>

    <tr ng-repeat="e in vm.getExample | filter:search:true">
        <td>{{ e.column1 }}</td>
        <td>{{ e.column2 }}</td>
    <tr>
</table>

{{e.column2}
专栏1
专栏2
{{e.column1}
{{e.column2}

您的问题在于使用
过滤器

您应该将
filter:search:true
更改为
filter:search

第三个参数是比较器。在这种情况下,您不需要它:

比较器,用于确定是否使用 表达式(当它不是函数时)应视为匹配 基于期望值(来自过滤器表达式)和实际值 值(来自数组中的对象)

如果您想更多地了解比较器,我建议您阅读(SO)


代码的工作片段:

var-app=angular.module('testApp',[]);
app.controller('testController',['$scope',函数($scope){
this.getExample=[{
“column1”:1,
“column2”:2
}, {
“column1”:3,
“column2”:4
}, {
“column1”:5,
第二栏:6
}];
}]);

{{e.column1}
{{e.column2}
专栏1
专栏2
{{e.column1}
{{e.column2}

在控制器中创建自定义过滤器:

$scope.filterMyData = function (input, searchParam) {

     if (searchParam == '')
          return true;

     return angular.equals(input, searchParam);
}
并改为:

<tr ng-repeat="e in vm.getExample | filter:search:filterMyData">


我认为问题在于删除真实选项(|过滤器:搜索),我知道,但如果我有“some”和“some data”值,并选择按“some”进行过滤,它将同时显示这两个值。我需要几个字段的严格比较器。我需要严格筛选,因为如果我有'some'和'some data'值并选择按'some'筛选,它将同时显示这两个值。谢谢@Justas。我遇到了同样的问题,你的回答很有帮助。