[英]ng-init Used Twice Inside ng-repeat, Only First ng-init is Being Evaluated
請參閱以下代碼:
<tr ng-repeat="x in [].constructor(6) track by $index" ng-init="loopNumber = $index">
<td class="border-right" style="width:10%;" ng-init="day = monthOfData[7 * loopNumber]">
<p>{{day}}</p>
</td>
<td class="border-right" style="width:10%;" ng-init="day = monthOfData[7 * loopNumber+1]">
<p>{{day}}</p>
</td>
</tr>
我希望在哪里使用 {{day}},output 將類似於:
1
2
但是,output 是:
1
1
AngularJS 似乎在 ng-repeat 中跳過了 ng-init 的第二次使用。 這是 AngularJS 的性能特征嗎? 我正在使用 ng-init 來保存重新評估相同的表達式。
這不是錯誤, ng-init
的這種用法是錯誤的。 初始化意味着設置變量的起始值,因此在您最后一次使用ng-init
時,您正在初始化一個已經具有值的變量並“覆蓋”已經存在的變量。
更詳細地說: ng-init
的第一個實例設置loopNumber = 0
,因為 arrays 和索引以 0 開頭,而不是 1。然后你設置day = 0
0——此時,html 中{{day}}
的兩個實例都會評估為 0。然后最后設置day = 1
,因此{{day}}
的 output 變為 1。
請注意,這適用於頁面中您使用{{day}}
的所有位置,而不僅僅是第三個ng-init
之后的行。 ng-init
只有少數適當的用途(例如別名ng-repeat
的特殊屬性),這不是其中一種情況。
代碼如何在沒有ng-init
的情況下工作的示例:
<tr ng-repeat="x in [].constructor(6) track by $index">
<td>
<p>{{ monthOfData[7 * $index] }}</p>
</td>
<td>
<p>{{ monthOfData[7 * $index + 1] }}</p>
</td>
</tr>
或者,由於您的td
塊非常相似,我們可以像這樣添加第二個循環:
<tr ng-repeat="x in [].constructor(6) track by $index" ng-init="loopNumber = $index">
<td ng-repeat="x in [].constructor(2) track by $index" ng-init="var = $index">
<p>{{ monthOfData[7 * loopNumber + var] }}</p>
</td>
</tr>
請注意,在第二個示例中, ng-init
如何為引用兩個不同循環的$index
的兩個實例起別名。 這在第一個示例中不需要,我們可以在評估表達式時直接使用$index
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.