簡體   English   中英

如何強制更新ng-init?

[英]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 ,但它很容易閱讀。

https://plnkr.co/edit/cZ2SG6nf2SufdAWe1ye7?p=preview

另一種方法是在偽屬性內設置變量:

<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來初始化作用域上的值。

— AngularJS ng-init指令API參考

基於您的問題標題,我想說這篇文章可能是您的另一篇不錯的參考資料。 Angular有很多生命周期掛鈎(這就是ngInit的全部功能)。

我不確定您的項目的上下文,但是聽起來ngDoCheck對於您要實現的目標可能很有用。

ngDoCheck-這是用於檢測並根據Angular自身無法或不會檢測到的更改采取行動。

https://www.tutorialspoint.com/angular2/angular2_lifecycle_hooks.htm

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM