gpt4 book ai didi

angularjs过滤多个表达式

转载 作者:行者123 更新时间:2023-12-03 08:20:30 24 4
gpt4 key购买 nike

我是 angularjs 的新手,只是想在过滤方面得到一些帮助...

我了解过滤的基础知识(非常基础),但我想做的是使用多个表达式进行过滤。

HTML:

<body data-ng-init="phones = [{make:'Apple', model:'iPhone5'}, {make:'HTC', model:'One'}, {make:'Samsung', model:'GalaxyS4'}]">
<p>my first angular app</p>
<p><label>filter</label><input data-ng-model="phoneFilter.$" type="text"></p>
<ul>
<li data-ng-repeat="phone in phones | filter:phoneFilter">
{{phone.make}} {{phone.model}}
</li>
</ul>
</body>

现在,如果我过滤“apple”“iphone5”,它工作正常,但如果我在开始输入模型后立即输入“apple i”,则过滤器为空。

我需要为此创建自定义过滤器吗?

干杯

最佳答案

至少你不能简单地使用过滤器的基本形式 filter,因为 AngularJS 不能单独猜测一个空格表示“或”。

但是您不需要创建自己的指令。 AngularJS 1.1.5 为 filter 提供了第三个参数(参见 documentation )。它可以采用一个函数,该函数“将被赋予对象值和要比较的谓词值,如果该项目应包含在过滤结果中,则应返回 true”。然后,您所要做的就是:

$scope.multipleChoicesComparator = function (expected, actualInCompactForm)
{
// Get a list of predicates
var listActual = actualInCompactForm.split(' ');
var mustBeIncluded = false;

angular.forEach(listActual, function (actual)
{
// Search for a substring in the object value which match
// one of the predicate, in a case-insensitive manner
if (angular.lowercase(expected).indexOf(angular.lowercase(actual)) !== -1)
{
mustBeIncluded = true;
}
});

return mustBeIncluded;
};
<li data-ng-repeat="phone in phones | filter:phoneFilter:multipleChoicesComparator">
{{phone.make}} {{phone.model}}
</li>

Fiddle

关于angularjs过滤多个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17994699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com