Javascript 下拉列表中的angularjs自定义筛选器

Javascript 下拉列表中的angularjs自定义筛选器,javascript,angularjs,Javascript,Angularjs,我有ulli元素,其中写入了用户列表。 我有一个输入,用户可以在其中编写和过滤用户列表。 默认情况下,此ul元素是隐藏的。在专注于输入之后,我展示这个ul元素,在模糊上,我隐藏这个ul元素 <input type="text" autocomplete="off" ng-model="checkData[key]" /> <ul> <li ng-repeat="user in users | identification:checkData[key]"&g

我有
ulli
元素,其中写入了用户列表。 我有一个输入,用户可以在其中编写和过滤用户列表。 默认情况下,此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>

  • {{user}
和我的过滤器:

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;
    }
}
return(项目:数组,值:字符串|编号)=>
{
如果(项目类型!==“未定义”)
{
筛选的变量:数组=[];
对于(变量i:number=0,长度:number=items.length;i
这很好,但我有一个问题。当用户在输入中输入某个值时,ul元素中的用户列表将被过滤

所以当用户再次关注输入时,在ul中显示过滤后的数据。我想在每个焦点上显示完整列表,不删除输入值


如何实现这一点?

您可以通过向filter方法传递一个参数来禁用聚焦过滤器,方法如下:

<ul>
    <li ng-repeat="user in users | identification:checkData[key]:isEnabled" ng-focus="isEnabled = false;">{{user}}</li>
</ul>
  • {{user}
修改您的过滤器:

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;
    }
}
return(项目:数组,值:字符串|数字,isEnabled:boolean)=>
{
如果(!isEnabled){
返回项;//返回未筛选的列表。。。
}
如果(项目类型!==“未定义”)
{
筛选的变量:数组=[];
对于(变量i:number=0,长度:number=items.length;i
这样就可以了。试试这个

<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>

  • {{user}

不要在
li
ng repeat
  • {code}}
@Kulbhushan中使用过滤器,在哪里写入?如果您不想要过滤数据,为什么要自己应用过滤器?我想过滤数据,但在关注点上,我想始终使用非过滤数据