我尝试为大型数据集创建过滤器操作的进度条。
但是,当我尝试使用$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
答案 0 :(得分:1)
非常简单:
$apply
。我不认为在你的javascript运行时显示进度条是一个好主意。无论如何你可以这样做,(你需要手动运行过滤器): http://plnkr.co/edit/lBHKjlT7AAJWlPpRwmGJ?p=preview
请记住,javascript只有一个帖子,当javascript工作时,用户无法在浏览器中执行任何操作。