嗨,我有一个小角度的应用程序,如:
html
<body ng-app> <div ng-controller="Ctrl"> <div ng-repeat="user in users | filter:1"> <span>{{ user.username }},{{ user.id }}</span> </div> </div> </body>
app.js
function Ctrl($scope) { $scope.users = [ {"id":1,"username":"simon",},{"id":8,"username":"betty",{"id":14,"username":"archie",{"id":3,"username":"jumbo1"},] }
simon,1 archie,14 jumbo1,3
我想做的是过滤一个精确匹配的过滤器参数和过滤器id字段ONLY。
基本上,我想要的输出是:
simon,1
我使用Angular 1.2,但我很难得到如何获得我需要的确切的功能。
任何帮助将不胜感激。
在Angular 1.1.3或更高版本中,您可以使用以下命令:
<div ng-repeat="user in users | filter:{'id': 1}:true">
{‘id’:1}说只能与字段ID进行比较。这让你:
simon,14
:true表示“完全匹配”导致:
simon,1
这是工作:http://jsfiddle.net/AM95H/
要对一个值列表进行过滤,如果你有一个作用域变量中的列表,我会添加一个自定义过滤器到你的JS文件:
$scope.filterValues = [1,8]; $scope.myFilter = function(value) { return ($scope.filterValues.indexOf(value.id) !== -1); };
使用像这样:
<div ng-repeat="user in users | filter: myFilter">
要过滤参数列表,我们将创建自己的过滤器。在这种情况下,我们将调用一次所有的输入值来测试,而不是每个值一次。
因此,我们将接收的第一个参数是输入值数组(在您的情况下是用户),第二个参数是我们传入的参数([1,8])。然后,我们将创建一个输出数组,并在输入流中添加(推送)匹配其中一个filterValues的任何项目。并返回输出数组。
myApp.filter('myFilter',function () { return function(inputs,filterValues) { var output = []; angular.forEach(inputs,function (input) { if (filterValues.indexOf(input.id) !== -1) output.push(input); }); return output; }; });
并使用它像这样:
<div ng-repeat="user in users | myFilter:[1,8]">
这里有一个例子:http://jsfiddle.net/AM95H/2/