【发布时间】:2017-05-01 19:07:32
【问题描述】:
我终于设法让我的日期过滤器工作了,但现在我遇到了问题......
我有一个应该按名称和日期过滤的简单表格。它过滤正确,但日期过滤器非常慢。在调试和研究之后,我知道问题是我的自定义日期范围(从 - 到)过滤器被多次调用。 它被称为:
- 当我点击日历选择日期但在实际显示日历控件之前
- 显示日历后立即
- 选择日期后
如果我在打开日历后没有选择任何日期,它甚至会运行前 2 次。每次我从一个月更改为另一个月时,它也会运行。
此外,对于这 3 次调用过滤器的每一次,它也会为列表中的每一行运行一次。在示例中,我只有 10 行(实际上很快),但在我的应用程序中,它有更多,而且需要很长时间。
理想的情况是在选择日期后只调用一次此代码。
为简单起见,我在这里展示了几行代码,但您可以在 Plunker 上查看整个示例:
HTML 代码:
<!-- This is the datepicker control filter -->
<ng-datepicker ng-model="DateRegisteredFrom" view-format="MM/DD/YYYY" placeholder="mm/dd/yyyy"></ng-datepicker>
<!-- Here is the table -->
<tr ng-repeat="item in model.People | filter:searchText | dateRegisteredFilter:DateRegisteredFrom:DateRegisteredTo | orderBy:orderByField:reverseSort ">
</tr>
这是我的 javascript 代码:
.filter("dateRegisteredFilter", function($filter, $rootScope) {
return function(items, from, to) {
return $filter('filter')(items, "DateRegistered", function(v) {
// Filter code...
});
};
});
经过大量阅读和研究,我学到了两件事:
由于 Angular 完成“脏检查”,我的代码被多次调用(感谢这个答案:ng-repeat execute many times)
实际比较日期很慢(如果代码只执行一次但不多的话就可以了)
如果有人能指出我正确的方向,或者我在阅读时做错了什么,我将不胜感激,我只找到了发生这种情况的原因,但我找不到解决方案或建议。
【问题讨论】:
标签: angularjs filter datepicker angularjs-ng-repeat