我正在使用Angularjs作爲Web應用程序。我試圖尋找解決方案來解決我的問題,而且似乎Angularjs並沒有簡化訪問ng-Repeat中新創建的DOM元素的簡單方法。選擇由Angularjs ng-repeat創建的新DOM元素
我準備了一個jsfiddle來顯示實際問題。 這裏是鏈接:http://jsfiddle.net/ADukg/956/
請讓我知道如何在ng-repeat中選擇新的DOM元素。
我正在使用Angularjs作爲Web應用程序。我試圖尋找解決方案來解決我的問題,而且似乎Angularjs並沒有簡化訪問ng-Repeat中新創建的DOM元素的簡單方法。選擇由Angularjs ng-repeat創建的新DOM元素
我準備了一個jsfiddle來顯示實際問題。 這裏是鏈接:http://jsfiddle.net/ADukg/956/
請讓我知道如何在ng-repeat中選擇新的DOM元素。
爲了擴充我的評論,我已經更新了你的小提琴,以展示一個指令的簡單實現,提醒元素的類。
http://jsfiddle.net/ADukg/994/
原文評論:
關於在控制器DOM操作,它says here,你不應該這樣做的。它應該在一個指令。控制器應該只包含業務邏輯。
爲什麼它不起作用,我不知道,但這可能是因爲角在這個時間點仍然在運行自己的東西。
感謝您的簡單回答。 :) – Raftalks
有兩種方法可以做到這一點:
1 NG-INIT
function controller($scope) {
$scope.items = [{id: 1, name: 'one'}, {id: 2, name: 'two'}];
$scope.initRepeaterItem(index, item) {
console.log('new repeater item at index '+index+':', item);
}
}
<ul>
<li ng-repeat="item in items" ng-init="initRepeaterItem($index, item)"></li>
</ul>
2 MutationObserver稍微複雜
做這樣的指令內,父母獲取新孩子的元素恩(<ul>
在這種情況下)
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
// you get notified about DOM mutations here
// check mutation.type if it was an insertion
console.log(mutation.target.nodeName, mutation.type, mutation);
});
});
var config = {childList: true, attributes: false, characterData: false,
subtree: false, attributeOldValue: false, characterDataOldValue: false};
observer.observe(element[0], config);
Demo http://plnkr.co/h6kTtq Documentation https://developer.mozilla.org/en/docs/Web/API/MutationObserver Browser support http://caniuse.com/mutationobserver
關於在控制器DOM操作,它[說,在這裏(https://groups.google.com/forum/?fromgroups=#!topic/angular/ u52B5bVzdqs),你不應該這樣做。它應該在一個指令。爲什麼它不起作用,我不知道,但這可能是因爲在這個時間點,角仍然在運行自己的東西。 – Narretz
我想你可以得到更好的解決方案,如果你能解釋爲什麼或爲什麼你試圖訪問新的DOM元素。如果你能解釋你可能會得到一個答案來解決你的問題的方式。 – ganaraj