2017-08-14 32 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' –

相關問題