我试图为大型数据集上的筛选操作创建进度条。但当我尝试使用$rootScope.$apply
或$timeout
时,这个过滤器会进入无限循环,我不明白为什么。当我评论出sort()
过滤器工作良好。有什么想法吗?
JS:
/* SORT RESULTS BY OBJECT PROPERTY VALUE */
.filter('sortObjectBy', ['$timeout', function ($timeout) {
var timeout
, timeoutHandler
;
timeout = function () {
if(timeoutHandler && typeof timeoutHandler.cancel === 'function'){
timeoutHandler.cancel();
}
timeoutHandler = $timeout(function () {
/* ... */
}, 200);
};
return function (data, sortBy, reverse) {
/* ... */
timeout();
return sortArr;
}
}]);
HTML:
<tb-filter-row ng-if="parentData"
ng-repeat="fd in parentData.children | sortObjectBy: sort.sortBy: sort.desc"
filter-data="fd"></tb-filter-row>
编辑:
我试图创建一个简单的小提琴,但它似乎也坏了:LINK
非常简单:
- 摘要称为
- 要检查值是否已更改,请启动过滤器
- 您的筛选器调用
$apply
- $apply启动新的摘要
- 要检查值是否已更改,请启动过滤器
我不认为在javascript运行时显示进度条是个好主意。无论如何,如果你想,你可以这样做,(你需要手动运行过滤器):http://plnkr.co/edit/lBHKjlT7AAJWlPpRwmGJ?p=preview
请记住,javascript只有一个线程,当javascript工作时,用户不能在浏览器中做任何事情。