【问题标题】:How to show all values when AngularJS strict filter field is empty?当AngularJS严格过滤字段为空时如何显示所有值?
【发布时间】:2018-01-30 11:30:40
【问题描述】:

我有一个可以按几列过滤的表格。过滤器很严格。当数据启动时,它会显示所有值。但是,在按某些列过滤并返回空选项以显示所有值后,它显示一个空表。如何仅对非空值应用严格过滤器?

<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>

【问题讨论】:

  • 我认为问题是删除真正的选项 (| filter:search)
  • 我知道,但如果我有 'some' 和 'some data' 值并选择按 'some' 过滤,它会同时显示两者。我需要几个领域的严格比较器。

标签: angularjs html-table angularjs-ng-repeat


【解决方案1】:

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

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

     if (searchParam == '')
          return true;

     return angular.equals(input, searchParam);
}

并改为:

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

【讨论】:

  • 谢谢@Justas。我遇到了同样的问题,你的回答很有帮助。
【解决方案2】:

你的问题在于filter的使用:

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

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

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

如果您想了解更多关于比较器的信息,我建议您阅读this excellent answer (SO)。


您的代码的工作 sn-p:

var app = angular.module('testApp', []);
app.controller('testController', ['$scope', function($scope) {
  this.getExample = [{
    'column1': 1,
    'column2': 2
  }, {
    'column1': 3,
    'column2': 4
  }, {
    'column1': 5,
    'column2': 6
  }];
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="testApp" ng-controller="testController as vm">
  <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">
      <td>{{ e.column1 }}</td>
      <td>{{ e.column2 }}</td>
      <tr>
  </table>
</div>

【讨论】:

  • 我需要严格的过滤器,因为如果我有 'some' 和 'some data' 值并选择按 'some' 过滤,它会同时显示两者。
猜你喜欢
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 2014-09-12
  • 2015-03-25
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多