ng模型不会为文本过滤器重新计算单个按键的数组长度
ng-model does not recalculate length of array on single keypress for a textfilter
我有一个表,它使用过滤后的文本区域来构建过滤后的表并列出计数。DOM如下所示。
<div filter-input></div>
<table>
<tr ng-repeat='item in filtered=(mySourceJSON | filter:filterInputService.searchText)'></tr>
.. .. ..
.. .. ..
</table>
过滤器输入为指令:
angular.module('myApp')
.directive('filterInput', function () {
return {
controller: 'FilterInputCtrl',
templateUrl: 'views/filter_input.html',
restrict: 'A',
link: function(scope, el, attr){
}
};
});
使用以下控制器:
angular.module('myApp')
.controller('FilterInputCtrl', function ($scope, filterInputService) {
$scope.filterInputService = filterInputService;
});
模板的内容是:
<div>
<span>
<input ng-model='filterInputService.searchText'/>
</span>
<span>
Showing {{filtered.length}} / {{gridItems.length}}
</span>
</div>
该服务是一个简单的占位符,它在初始化时将searchText设置为empty string
。
我看到的行为如下:
当我在过滤器输入中键入一个字符时,表会更新并隐藏与过滤器不匹配的项目,但是,在输入第二个字符之前,过滤项目的计数不会更新。究竟是什么引发了这种情况?为什么作用域直到第二个字符才更新?如何避免这种情况?
你是对的,你遇到了一个错误。我看了一下,它与摘要周期中的一个问题有关,但解决起来似乎不是很简单,不稳定的版本已经解决了它(打开Plnker,将Angular版本更改为1.1.5
即可查看)。
所以我想你最好的选择是解决它,因为它可能不值得为你的特定需要而努力解决这个bug。当前,您正在设置filtered
到ng-repeat
。你所要做的就是$watch
过滤器并自己应用过滤器。
基本上:
将绑定更改为:
<tr ng-repeat='item in filtered'>
然后,在您的控制器中,注入$filter
服务并存储对集合过滤器的引用。$watch
过滤字符并创建filtered
数组:
.controller('FilterInputCtrl', function ($scope, $filter, filterInputService) {
var dfFilter = $filter('filter');
$scope.filterInputService = filterInputService;
$scope.$watch('filterInputService.searchText', function(value) {
$scope.filtered = dfFilter($scope.mySourceJSON, value);
});
});
这是一个正在工作的Plnker。
相关文章:
- 如何在没有jQuery的情况下模拟按名称命名的事件或解除单个事件的绑定
- JavaScript if() 语句未按预期计算
- 按下按钮计算乘积和总和
- 按固定相关长度的比例计算轴长度
- 按类计算表单值
- jquery未按预期计算总和
- MongoDB Node.js按计算密钥分组
- 如何在Ember.js中创建一个计算属性来查看单个EmberData属性是否脏
- 在 javascript 中长按按钮时计算秒数
- 在 JavaScript 或 PHP 中按计算字段对数组进行排序
- MongoDB:按日历周和年聚合文档,并计算一个字段的所有值的总量
- JavaScript:按名称调用参数计算
- 如何仅按名称计算元素长度,而不是使用 javascript 显示 non
- 如何使用 onclick 事件引用按 id 计算选中的复选框
- 在 JavaScript 中按字符串开头或单个字符进行匹配
- Javascript Date() 来计算年龄,而不是按天工作
- j查询页面 每次向下滚动时,在单个页面中按键按下
- 从文本框中计算两个不同的日期值 按日历 并显示剩余天数,无需提交按钮
- 在PHP中使用单个按钮从计算机上传图片
- 计算在键盘中按下某个键的时间