javascript Angular.js 按精确值过滤(严格相等)

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/28688932/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-28 09:22:44  来源:igfitidea点击:

Angular.js filter by exact values (strict equality)

javascriptangularjs

提问by Muzafar Khan

I have following html code

我有以下 html 代码

  <ul ng-repeat="friend in friends | filter: { age: '2' } | orderBy: 'name' ">
   <li>{{friend.name}}</li>
  </ul>

Here is my $scope variable

这是我的 $scope 变量

 $scope.friends = [
{ name: "Peter",   age: 2 },
{ name: "Pablo",   age: 55 },
{ name: "Linda",   age: 20 },
{ name: "Marta",   age: 37 },
{ name: "Othello", age: 20 },
{ name: "Markus",  age: 32 }
];

It returns

它返回

Linda
Markus
Othello
Peter

How the comparison work in ng filter and How do i get friend having age 2 only

ng 过滤器中的比较如何工作以及我如何获得只有 2 岁的朋友

Peter

回答by m59

As of Angular 1.2, you just need to add the strict parameter (true) to the filter so that it looks for an exact match, and pass 2as a number instead of a string: filter:{age:2}:true

从 Angular 1.2 开始,您只需要向过滤器添加严格参数 (true) 以便它查找精确匹配,并2作为数字而不是字符串传递:filter:{age:2}:true

angular.module('myApp', [])
.controller('myCtrl', function($scope) {
   $scope.friends = [
    {name: "Peter",   age: 2 },
    {name: "Pablo",   age: 55},
    {name: "Linda",   age: 20},
    {name: "Marta",   age: 37},
    {name: "Othello", age: 20},
    {name: "Markus",  age: 32}
  ]; 
})
;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myApp" ng-controller="myCtrl">
  <ul ng-repeat="friend in friends | filter:{age:2}:true | orderBy: 'name' ">
   <li>{{friend.name}}</li>
  </ul>
</body>

回答by Shahid Chaudhary

Added directive to convert the model value to number workded for me after setting strict parameter (true).

添加了在设置严格参数(true)后将模型值转换为数字的指令。

myApp.directive('convertNumber', [function() {
  return {
    require: 'ngModel',
    link: function(scope, el, attr, ctrl) {
      ctrl.$parsers.push(function(value) {
        return parseInt(value, 10);
      });

      ctrl.$formatters.push(function(value) {
        if (value != null) {
          return value.toString();
        };
      });      
    }
  }
}]);