2012-10-06 12 views
5

द्वारा बनाए गए नए डोम तत्वों का चयन करें मैं वेब अनुप्रयोग के लिए Angularjs का उपयोग कर रहा हूं। मैंने अपनी समस्या का हल ढूंढने की कोशिश की है, और ऐसा लगता है कि Angularjs एनजी-दोहराने के भीतर नव निर्मित डीओएम तत्वों तक पहुंचने का एक आसान तरीका नहीं है।Angularjs ng-repeat

मैंने वास्तविक समस्या दिखाने के लिए एक jsfiddle तैयार किया है। यहां लिंक है: http://jsfiddle.net/ADukg/956/

कृपया मुझे बताएं कि एनजी-दोहराने के भीतर नए डीओएम तत्व का चयन कैसे करें।

+0

नियंत्रक में डोम हेरफेर के बारे में, यह [यहाँ कहते हैं] (https://groups.google.com/forum/?fromgroups=#!topic/angular/ u52B5bVzdqs) कि आपको यह बिल्कुल नहीं करना चाहिए। इसे निर्देश में जाना चाहिए। यह क्यों काम नहीं करता है, मुझे नहीं पता, लेकिन शायद यह इसलिए है क्योंकि इस बिंदु पर कोणीय अभी भी अपनी सामग्री चला रहा है। – Narretz

+0

मुझे लगता है कि यदि आप नए डोमेन तत्व तक पहुंचने का प्रयास कर रहे हैं या क्यों कारण के कारण आप बेहतर समाधान प्राप्त कर पाएंगे। यदि आप समझा सकते हैं कि आपको शायद आपकी समस्या को कोणीय तरीके से हल करने का उत्तर मिलेगा। – ganaraj

उत्तर

2

मेरी टिप्पणी पर विस्तार करने के लिए, मैंने आपके पहेली को एक निर्देश के सरल प्रत्यारोपण को दिखाने के लिए अद्यतन किया है जो तत्व की कक्षा को अलर्ट करता है।

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

मूल टिप्पणी:

नियंत्रक में डोम हेरफेर के बारे में, यह says here है कि आप यह बिल्कुल ऐसा नहीं करना चाहिए। इसे निर्देश में जाना चाहिए। नियंत्रक में केवल व्यापार तर्क होना चाहिए।

यह क्यों काम नहीं करता है, मुझे नहीं पता, लेकिन शायद ऐसा इसलिए है क्योंकि कोणीय समय पर इस समय अपनी सामग्री चला रहा है।

+0

सरल उत्तर के लिए धन्यवाद। :) – Raftalks

1

ऐसा करने के दो तरीके हैं:

1 एनजी-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