[英]How to force update of ng-init ?
我發現在更新rowIndex之后不會更新ng-init。
<div ng-init="item = getItem(rowIndex)">
{{ item.Name }}
</div>
rowIndex更改后,項目不會更新(即使使用$ timeout進行了更改)
還有其他指令可以避免使用以下骯臟的把戲:
<div ng-repeat="item in [getItem(rowIndex)]">
{{ item.Name }}
</div>
ngInit
不更新。 這是一個一次性指令。 您只需要在花括號內調用該函數,因為您要注意對rowIndex
更改:
<div>
{{ getItem(rowIndex).Name }}
</div>
這可能會損害大型列表的性能,因為在每個摘要周期都會調用getItem
,但它很容易閱讀。
另一種方法是在偽屬性內設置變量:
<div x="{{item = getItem(rowIndex)}}">
{{ item.Name }} {{item.Value}}
</div>
在每個摘要循環中, item
的值將被更新。
在item
具有多個屬性的情況下,只需調用一次getItem
函數。
請記住,當rowIndex
更改時,控制器僅一次更新item
的值將比在每個摘要周期調用getItem
函數更有效。
ng-init
避免使用ng-init
。 它纏結了模型和視圖,使代碼難以理解,測試,調試和維護。 而是在控制器中初始化Model。
從文檔中:
ngInit
可以濫用此指令在模板中添加不必要的邏輯量。
ngInit
只有少數適當的ngInit
,例如別名ngRepeat
特殊屬性,如下面的演示所示; 以及通過服務器端腳本注入數據。 除了這幾種情況,您應該使用控制器而不是ngInit
來初始化作用域上的值。
基於您的問題標題,我想說這篇文章可能是您的另一篇不錯的參考資料。 Angular有很多生命周期掛鈎(這就是ngInit的全部功能)。
我不確定您的項目的上下文,但是聽起來ngDoCheck對於您要實現的目標可能很有用。
ngDoCheck-這是用於檢測並根據Angular自身無法或不會檢測到的更改采取行動。
https://www.tutorialspoint.com/angular2/angular2_lifecycle_hooks.htm
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.