2012-10-06 13 views
5

Web uygulaması için Angularjs kullanıyorum. Soruna bir çözüm bulmaya çalıştım ve Angularjs, ng-Repeat içindeki yeni oluşturulan DOM öğelerine erişmenin kolay bir yolunu desteklemiyor gibi görünüyor.Angularjs ng-repeat tarafından oluşturulan Yeni DOM öğeleri seçin

Asıl sorunu göstermek için bir jsfiddle hazırladım. http://jsfiddle.net/ADukg/956/

beni ng tekrar içinde yeni DOM öğesine nasıl seçileceğini bildirin: burada bağlantıdır.

+0

, bu [yazıyor] (https://groups.google.com/forum/?fromgroups=#!topic/angular/ u52B5bVzdqs) bunu hiç yapmamalısınız. Bir direktifte gitmeli. Neden işe yaramıyor, bilmiyorum, ama büyük olasılıkla açgözlülüğün zaman içinde bu noktada kendi eşyalarını çalıştırmasıdır. – Narretz

+0

Yeni dom elemanına neden veya neden ulaşmaya çalıştığınızı açıklayabiliyorsanız, daha iyi bir çözüm elde edebileceksiniz. Eğer probleminizi çözmek için muhtemelen bir cevap alacağınızı açıklayabilirseniz, açısal yol. – ganaraj

cevap

2

Yorumumu genişletmek için, öğenin sınıfını uyaran bir yönergenin basit bir uyarlamasını göstermek için kemanınızı güncelledim.

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

Orijinal açıklama:

denetleyicisi dom manipülasyon ile ilgili olarak, bunun tamamını yapmamalısınız says here. Bir direktifte gitmeli. Kontrolör sadece iş mantığını içermelidir.

Neden işe yaramıyor, bilmiyorum, ama büyük olasılıkla açgözlülüğün bu noktada zamanda kendi işlerini yürütmesi nedeniyle olması muhtemeldir.

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 MutationObserverbiraz daha karmaşık
bir bölümü içinde bunu yapın: Bunu yapmanın iki yolu vardır

+0

Basit cevap için teşekkürler. :) – Raftalks

1

ebeveynleri yeni childr olan öğeye (Bu durumda <ul>) en denetleyicisi dom manipülasyonu ile ilgili olarak

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 
İlgili konular