2017-08-14 22 views
1
<div *ngFor="let student of mystudentsFiltered | orderBy : ['-presence', 'unreadcount']> 

在上面for模板,我使用了一个管orderBy,这对列表进行排序,每次有一个列表中项目(学生)的状态更改。不知何故,每次出现鼠标或键盘事件时都会重复调用此管道。异步管道用来排序列表,每天有一个鼠标或键盘事件时调用 - Angular4

我研究更发现,在Angular4被执行每次有一个变化检测。而Angular4考虑在变化检测机制以下为:

1)活动 - 点击提交,滚动,

2)XHR - 从远程服务器

3)计时器获取数据 - 的setTimeout( ),setInterval()

如何限制在有数据更改但不包含默认更改检测事件时调用所述管道?

+0

您已将'ChangeDetectionStrategy'更改为'onPush',就像这个'changeDetection:ChangeDetectionStrategy.OnPush'一样,尽管不推荐这样做,因为它导致性能较差 –

+0

@RahulSingh这是我第一次看到有人说“onPush”导致糟糕的表现。正确使用'onPush'可以极大地提升**应用程序的性能,您只需要对Angular的变化检测机制有一个很好的理解。 –

+0

性能是使用管道进行过滤。管道并不意味着用作过滤器 –

回答

0

您不应该使用订单管道或过滤器管道。如你经历过的那样,这对性能不利。你可以阅读更多关于它here。您需要在服务中执行订购

+0

我使用管道中的变换方法直接从服务中调用。现在,在默认的更改事件(即鼠标事件等)上不会调用管道 –

+0

这可能是因为您使用了'ChangeDetectionStrategy.OnPush' –

相关问题