2017-10-07 86 views

回答

0

這是因爲變化檢測如何在角度上起作用。首先,在開發過程中,每次變更檢測都會運行兩次。

要改變這一點:

import { enableProdMode } from '@angular/core'; 
enableProdMode() 
platformBrowserDynamic().bootstrapModule(AppModule) 

然後讓你的代碼工作的預期變化changedetectionstrategy到OnPush

@Component({ 
selector: 'joke-list', 
template: ` 
<div *ngFor="let joke of jokes"> 
<p>{{inc()}} - {{joke}}</p> 
</div>`, 
changeDetection: ChangeDetectionStrategy.OnPush 
}) 

Plunkr與解決方案:Plunkr

0

嘗試改變這一行:

<p>{{inc()}} - {{joke}}</p> 

像這樣:

<p>{{jokes.indexOf(joke)}} - {{joke}}</p> 

這樣,你總是會得到數組中的項目的數量,提高可讀性甚至保存一些代碼行。

+0

這個答案並不能解釋爲什麼是該plunkr無法正常工作。 –

+0

你仍然應該解釋當前代碼有什麼問題,否則開發人員會從中學到什麼? –

+0

他仍然不知道_why_是一種合適的方式,而不是「另一種方式」 –

0

您的代碼無法正常工作,因爲您的模板中的{{ inc() }}每次觸發變更檢測週期時都會被調用。即它將被調用的次數超過jokes字段中的項目。

相反,您應該依賴Angular提供的index變量(如其他受訪者建議的那樣)。

以下是關於ngFor directive官方文檔的鏈接。

另外,如果你想想知道爲什麼你原來的代碼沒有按照你的預期工作,請閱讀change detection in Angular

+0

親愛的投票人,你能解釋我的答案有什麼問題嗎? –