[英]AngularJS: remove item from a list using ngRepeat and ngInit
我使用ngRepeat來顯示列表中的項目。 根據文檔的建議,我使用ngInit將$ index變量賦值給我在循環內引用的“itemIndex”變量。 每個項目都顯示一個按鈕,允許我從列表中刪除它。 這是一個jsfiddle示例:
<li ng-repeat="item in list" ng-init="itemIndex = $index"> {{itemIndex}} {{item}} <a href="#" ng-click="removeItem(itemIndex)">remove</a></li>
如果我嘗試刪除項目,則不更新itemIndex變量,因此后續刪除失敗。 相反,如果我使用$ index變量,一切都按預期工作( 這是沒有ngInit-ed變量的相同示例):
<li ng-repeat="item in list">{{$index}} - {{item}} <a href="#" ng-click="removeItem($index)">remove</a></li>
這是一個錯誤還是預期的行為?
這種行為是有意的,ng-init只是故意運行一次。
當您查看ngInit指令( https://github.com/angular/angular.js/blob/master/src/ng/directive/ngInit.js )時,您可以看到腳本的$eval
uation傳遞給ng-init在compile
函數中完成,而不是在link
函數中完成。
var ngInitDirective = ngDirective({
priority: 450,
compile: function() {
return {
pre: function(scope, element, attrs) {
scope.$eval(attrs.ngInit);
}
};
}
});
編譯僅在應用程序生命周期中執行一次,而每次將指令link
到元素/文檔時都會執行link
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.