search。$还会搜索ID

马克·拉斯穆森

我直接跳到案子上。

基本上,当您具有这样的对象数组时:

{id: 1, name: "Hello", location: "New york", streetNumber: 50}

然后,您有一个输入字段:

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

和下表:

<table>
    <thead>
    <th>Name</th>
    <th>Location</th>
    <th>Street number</th>
    </thead>
    <tr ng-repeat="item in items | filter:search">
        <td>
            {{item.name}}
        </td>
        <td>
            {{item.location}}
        </td>
        <td>
            {{item.streetNumber}}
        </td>
    </tr>
</table>

因此,当您在搜索字段中键入:“ 1”。

然后,您还将获得id匹配项为1.的对象

我的问题是如何排除未显示的项目?

小提琴

丹尼斯·贝祖林

好吧,看看文档

可以使用特殊的属性名称(默认情况下为$)(例如,在{$:“ text”}中)接受对象的任何属性或其嵌套对象属性的匹配。

这就是为什么包含id满足条件的结果的原因。

解决方案1,简单但工作较慢

添加其他过滤

<tr ng-repeat="item in items | filter : search | filter : { id: '!search.$' }">


解决方案2,困难但快速

考虑编写自己的过滤器,例如

JS

app.filter('searchFields', function () {
    return function (array, fields, string) {
        fields = fields.split(',');

        var i,
            fieldsLength = fields.length;

        return array.filter(function (item) {
            for (i = 0; i < fieldsLength; i++) {
                if (typeof item[fields[i]] === 'undefined') {
                    continue;
                }

                return (item[fields[i]] + '').indexOf(string) !== -1;
            }
        });
    };
});

的HTML

<tr ng-repeat="item in items | searchFields : 'name,location,streetNumber' : search.$">

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章