当没有输入时,如何改变过滤器的动作
How to change filter action when there's no input?
我想在AngularJs中创建一个typeAhead,并遵循本教程的大部分方法。它唯一没有为我做的是,我希望整个列表在你第一次点击框时显示,而不是等待输入来显示任何内容。
在模板中有
<input type="text" ng-model="model" placeholder="{{prompt}}"
ng-keydown="selected=false"/>
...
<div class="item" ng-repeat="item in items | filter:model track by $index"
ng-click="handleSelection(item[title])" style="cursor:pointer"
ng-class="{active:isCurrent($index)}" ng-mouseenter="setCurrent($index)">
我需要创建一个自定义过滤器,我想它会有点像
.filter('psudoFilter', function($filter){
var original_filter = $filter('filter');
return function(input){
if(input.length === 0){
return // What should I return if I don't want to change the data?
} else {
return original_filter(input_to_filter_items_by); //Filter as usual
}
}
});
我的问题是,内部函数应该返回什么,以便它在没有输入时不过滤?过滤器如何与它实际要过滤的数据交互?
问题并不在于过滤器。问题是,只有在文本框中输入内容时,项目列表才可见:
<div class="items" ng-hide="!model.length || selected">
你要做的是在文本框被点击时显示列表。我假设您还希望在文本框失去焦点时隐藏列表。在文本框中添加ng-focus
和ng-blur
事件。我在这些事件中设置了boxHasFocus
属性,并修改了列表中的ng-hide
,以便在boxHasFocus
为真时显示。
<input type="text" ng-model="model" placeholder="{{prompt}}" ng-keydown="selected=false" ng-focus="boxHasFocus=true" ng-blur="boxHasFocus=false" />
<br/>
<div class="items" ng-hide="(!model.length || selected) && !boxHasFocus">
这有一个问题。最初,列表项看起来像这样:
<div class="item" ng-repeat="item in items | filter:model track by $index" ng-click="handleSelection(item[title])" ...
问题是blur
事件在click
事件之前触发,所以列表在您点击一个项目之前就消失了。解决方案是使用ng-mousedown
而不是ng-click
,因为mousedown
事件在blur
事件之前被触发。
<div class="item" ng-repeat="item in items | filter:model track by $index" ng-mousedown="handleSelection(item[title])"
看看这个。只有部分这个例子没有处理是显示整个列表时,用户单击它开始。但是这样很容易勾搭上。
http://www.byteblocks.com/Post/Autosuggest-text-box-using-AngularJS相关文章:
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 为什么我的d3.jsselectAll+过滤器没有过滤
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- Angular-表的多列过滤器
- jQuery:当屏幕大小改变时,如何更改默认图像和悬停图像
- 如何“;过滤器”;或者以其他方式重构该数据
- Angularjs通过过滤器获取indexOf
- ui网格日期单元格过滤器,过滤日期格式导致显示错误的日期
- 使用按钮的Angular UI网格过滤器
- 为什么使用immutableJS我的状态没有改变
- JavaScript改变了双方的显示风格
- KendoUI网格行过滤器,带有布尔值下拉列表
- 如何在angular.js中动态应用自定义过滤器
- 如何改变图标或图标的颜色在剑道ui网格过滤器
- 当没有输入时,如何改变过滤器的动作
- Angular.js在ng-repeat的一个项上做了改变,会导致所有其他项上的过滤器都运行
- HTML范围元素改变CSS过滤器
- 在Angular.js中自定义日期过滤器来改变日期格式
- 在angular中,如何对使用过滤器显示的字段使用orderBy和ngRepeat,从而改变它们的实际内容
- 标题中单独的列过滤.如何改变搜索过滤器文本框的宽度为每个列's单独