2016-11-15 30 views
2

我有一個Angular2組件,它基於來自無頭CSM的數據呈現頁面片段。特別地,組件呈現使用模板這樣的頁腳:爲什麼即使沒有變化,我的Angular2模板的一小部分也會重新渲染?

<div class="footer"> 
    <div class="row"> 
     <div class="col s12 m6" *ngFor="let column of footer"> 
      <div [innerHtml]="sanitizer.bypassSecurityTrustHtml(column)"></div> 
     </div> 
    </div> 
</div> 

this.footer哪裏是包含HTML字符串的陣列的專用變量。 this.footer設置在ngOnInit()中。整個模板比這個大得多。

我的問題是這個模板的特定片段不斷重新呈現每隔1-2秒。這使得選擇頁腳中找到的聯繫人詳細信息成爲不可能,因爲選定的HTML節點被新的(相同的)節點替換,因此選擇被重置。

頁面的其餘部分以類似的方式呈現,但不表現出這個問題。如果我查看Chrome調試器中的元素,我們可以看到這個特定片段的<div>s在被替換時閃爍。

我在記錄ngOnInit()ngOnChanges()但在重新渲染過程中它們沒有運行。

我不知道是什麼原因造成的。

回答

0

如果綁定到視圖中的函數,那麼每次運行更改檢測時都會調用它們。

如果sanitizer.bypassSecurityTrustHtml(column)爲每個調用返回一個不同的對象實例,Angular會再次呈現[innerHTML]部件,因爲它會將其識別爲更改。

首選將函數結果賦值給組件中的屬性,然後將此屬性綁定到視圖。

+0

嗯....這是一個很好的小陷阱。顯然,即使參數相同,函數結果也是不同的實例。謝謝。 –

+0

通常情況下,除非結果被緩存,並且函數返回緩存的結果。但是在這種情況下,你可以綁定到緩存,只有當參數發生變化時纔會調用函數。 –