2012-10-06 68 views
5

我正在使用Angularjs作爲Web應用程序。我試圖尋找解決方案來解決我的問題,而且似乎Angularjs並沒有簡化訪問ng-Repeat中新創建的DOM元素的簡單方法。選擇由Angularjs ng-repeat創建的新DOM元素

我準備了一個jsfiddle來顯示實際問題。 這裏是鏈接:http://jsfiddle.net/ADukg/956/

請讓我知道如何在ng-repeat中選擇新的DOM元素。

+0

關於在控制器DOM操作,它[說,在這裏(https://groups.google.com/forum/?fromgroups=#!topic/angular/ u52B5bVzdqs),你不應該這樣做。它應該在一個指令。爲什麼它不起作用,我不知道,但這可能是因爲在這個時間點,角仍然在運行自己的東西。 – Narretz

+0

我想你可以得到更好的解決方案,如果你能解釋爲什麼或爲什麼你試圖訪問新的DOM元素。如果你能解釋你可能會得到一個答案來解決你的問題的方式。 – ganaraj

回答

2

爲了擴充我的評論,我已經更新了你的小提琴,以展示一個指令的簡單實現,提醒元素的類。

http://jsfiddle.net/ADukg/994/

原文評論:

關於在控制器DOM操作,它says here,你不應該這樣做的。它應該在一個指令。控制器應該只包含業務邏輯。

爲什麼它不起作用,我不知道,但這可能是因爲角在這個時間點仍然在運行自己的東西。

+0

感謝您的簡單回答。 :) – Raftalks

1

有兩種方法可以做到這一點:

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