javascript - angularjs 过滤器只返回完全匹配的值

标签 javascript html angularjs angularjs-filter

我的 angularjs 应用程序中有一个复选框作为过滤器:

这是我的数据:

app.controller('listdata', function($scope, $http) {
$scope.users = [{
    "name": "pravin",
    "queue": [{
        "number": "456",
        "status": "Unavailable"
    }],
    "phone": "7411173737"
},
{
    "name": "pratik",
    "queue": [{
        "number": "111",
        "status": "Unavailable"
    }],
    "phone": "8558855858"
},
{
    "name": "priyanka",
    "queue": [{
        "number": "111",
        "status": "Unavailable"
    }],
    "phone": "5454573737"
},
{
    "name": "prerana",
    "queue": [{
        "number": "111",
        "status": "Unavailable"
    }],
    "phone": "7454543737"
}];

});

我在我的 View 中显示上述数据是这样的:

//这是过滤器

<label class="switch">
  <input ng-true-value='111' ng-false-value='' type="checkbox" ng-model="queue111">111
</label>

//ng-重复部分

<div class="row" ng-controller="listdata">
    <div ng-repeat="user in users|filter:queue111">
       <p> {{user.name}} {{user.phone}}</p>
    </div>
</div>

当我启动应用程序时,将显示用户数据数组中的所有四个用户。 当我单击过滤器复选框时,它会显示队列编号为 111 的用户。但它还会显示用户 pravin,因为它包含电话号码 7411173737,其中包含 111。我希望此过滤器仅显示队列编号的记录与 111 匹配,而不与任何其他字段(如此处的电话号码)匹配。所以过滤器应该只显示队列号为 111 的记录。

是否可以做类似的事情

<input ng-true-value='111' ng-false-value='' type="checkbox" ng-model="queue111.queue.number">111

Current output : it displays all the four data objects in $scope.users

Expected output : display only the data objects where in queue number is 111 in $scope.users

我该怎么做?

最佳答案

尝试使用此自定义过滤器函数来仅匹配队列数组中的值。

var Controller = function($scope) {
  $scope.users = [{
      "name": "pravin",
      "queue": [{
        "number": "456",
        "status": "Unavailable"
      }],
      "phone": "7411173737"
    },
    {
      "name": "pratik",
      "queue": [{
        "number": "111",
        "status": "Unavailable"
      }],
      "phone": "8558855858"
    },
    {
      "name": "priyanka",
      "queue": [{
        "number": "111",
        "status": "Unavailable"
      }],
      "phone": "5454573737"
    },
    {
      "name": "prerana",
      "queue": [{
        "number": "111",
        "status": "Unavailable"
      }],
      "phone": "7454543737"
    }
  ];

  $scope.filter = function(item) {
    if ($scope.queue111) {
      return JSON.stringify(item.queue).includes($scope.queue111);
    } else {
      return true;
    }
  };

};

angular
  .module('app', [])
  .controller('Controller', Controller);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="Controller">
  <label class="switch">
    <input ng-true-value='111' ng-false-value='' type="checkbox" ng-model="queue111">
  </label>
  <pre>Search value: {{queue111}}</pre>
  <div ng-repeat="user in users | filter:filter">
    {{user.name}} {{user.phone}}
  </div>
</div>

关于javascript - angularjs 过滤器只返回完全匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53632801/

相关文章:

javascript - 在 JQuery ajax beforeSend 中调用模态对话框收集一些信息

javascript - 如何通过JS将一个元素的第n个子元素的src属性赋值给另一个元素

css - 像密码输入一样设计我的文本输入

angularjs - 带有 angular-ui bootstrap 的弹出窗口中的年份选择器

angularjs - 如何将 Angular ui.bootstrap 选项卡与 ui.router 一起使用?

javascript - 如何从android中webview上加载的javascript函数中获取值

javascript - 为什么 JS 中的背景图像并不总是返回属性 'naturalWidth'?

javascript - 在加载外部脚本之前不要执行其余代码

javascript - 使用 JavaScript 进行 For 循环,得到 1 个不在循环中的 inc 数字

javascript - 为什么在使用 jQuery replaceWith() 时标记 <constructor> 会导致 'undefined'?