簡體   English   中英

AngularJS:使用ngRepeat和ngInit從列表中刪除項目

[英]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.

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