AngularJS 仅对一个字段进行严格过滤

标签 angularjs angularjs-ng-repeat angularjs-filter

我有一个包含多个过滤器的表单,但对于某些过滤器,我需要严格比较。

tl;dr:严格比较 user_id,而不是 firstname

<select ng-model="search.user_id">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="23">23</option>
</select>

<input type="text" ng-model="search.firstname">

<ul>
    <li ng-repeat="user in users | filter:search">#{{ user.user_id }} {{ user.firstname}}</li>
</ul>

我尝试了第三个参数true,但它也适用于firstname过滤器。

问题是:如果您选择值 2,则 id 中包含 2 的所有用户都将被过滤,我不希望出现这种行为。

这是fiddle .

最佳答案

我尝试在本地修复它,而不是使用自定义过滤器,它的工作原理是 PLUNKER LINK

必须指定多个过滤器标签

<li ng-repeat="user in users | filter:{'user_id':  search.user_id}: true | filter: {'firstname' : search.firstname}">

尽管有一些警告:

  1. 我必须将类型从数字更改为字符串...

  2. 如果我重置完全匹配的值,它不起作用...

所以我必须编写一个自定义文件管理器,它可以精确匹配并忽略空/空值

$scope.filter2 = function(field1, field2) {
  if(field2 === "" || field2 === null) return true;
  return field1 === field2;
};

您会在提供的 plunker 链接中找到它们

关于AngularJS 仅对一个字段进行严格过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24867824/

相关文章:

javascript - AngularJS:过滤器多次触发,值通常是未定义的

javascript - 没有模板的 AngularJS 指令并共享父范围的更新

javascript - 如何在一个表行中使用两个 ng-repeats?

AngularJS "Wire up a Backend"示例仍然无法正常工作

javascript - Gulp uglify 失败并出现 js 解析错误

javascript - Angular 文本输入为重复的文本输入添加值

javascript - AngularJs - 将一个 ng-model 绑定(bind)到具有两个输入的指令

javascript - 将\n 替换为我在 $sce.trustAsHtml() 上使用的模型变量上的 <br> 标记

angularjs - Angular 从 Element 获取 Controller

angularjs - 选择 Bootstrap 与 Material 设计