angularjs自定义过滤器在下拉列表中

时间:2015-12-30 08:58:49

标签: javascript angularjs

我有ul li元素,其中是用户列表。 我有一个输入,用户可以在其中编写和过滤用户列表。 这个ul元素默认是隐藏的。在关注输入之后,我显示了这个ul元素并且模糊了我隐藏了这个ul。

<input type="text" autocomplete="off" ng-model="checkData[key]" />

<ul>
    <li ng-repeat="user in users | identification:checkData[key]">{{user}}</li>
</ul>

我的过滤器:

return (items: Array<string|number>, value: string|number) =>
{
    if(typeof items !== 'undefined')
    {
        var filtered: Array<string|number> = [];

        for(var i: number = 0, length: number = items.length; i < length; i++)
        {
            var element: string|number = items[i];

            if((((element + '').indexOf(value + '') === 0) && element !== value) || typeof value === 'undefined')
            {
                filtered.push(element);
            }
        }
        return filtered;
    }
}

这很有效,但我有一个问题。当用户在输入中输入一些值时,将过滤ul元素中的用户列表。

所以当用户再次关注输入时,ul显示过滤后的数据。我希望每次关注,显示完整列表并且不删除输入值。

如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

您可以通过以下方式将参数传递给过滤器方法来禁用焦点上的过滤器:

<ul>
    <li ng-repeat="user in users | identification:checkData[key]:isEnabled" ng-focus="isEnabled = false;">{{user}}</li>
</ul>

修改过滤器:

return (items: Array<string|number>, value: string|number, isEnabled: boolean) =>
{
    if (!isEnabled) {
        return items;  // Return the unfiltered list ...
    }
    if(typeof items !== 'undefined')
    {
        var filtered: Array<string|number> = [];

        for(var i: number = 0, length: number = items.length; i < length; i++)
        {
            var element: string|number = items[i];

            if((((element + '').indexOf(value + '') === 0) && element !== value) || typeof value === 'undefined')
            {
                filtered.push(element);
            }
        }
        return filtered;
    }
}

答案 1 :(得分:0)

这样就可以了。试试这个。

<input type="text" autocomplete="off" ng-model="checkData[key]" ng-focus="filterKey[key] = ''" ng-blur="filterKey[key] = checkData[key]"/>
<!-- hidden field to save search text -->
<input type="hidden" ng-model="filterKey[key]"/>
<ul>
    <li ng-repeat="user in users | identification:filterKey[key]">{{user}}</li>
</ul>