2012-10-06 13 views
5

Używam Angularjs do aplikacji internetowej. Próbowałem znaleźć rozwiązanie mojego problemu i wydaje się, że Angulary nie ułatwiają łatwego dostępu do nowo utworzonych elementów DOM w ramach Ng-Repeat.Wybierz Nowe elementy DOM utworzone przez Angularjs ng-repeat

Przygotowałem jsfiddle, aby pokazać rzeczywisty problem. tutaj jest link: http://jsfiddle.net/ADukg/956/

Proszę dać mi znać jak wybrać nowy element DOM w ciągu ng-repeat.

+0

chodzi o manipulację DOM w sterowniku, to [mówi tutaj] (https://groups.google.com/forum/?fromgroups=#!topic/angular/ u52B5bVzdqs), że nie powinieneś tego robić w ogóle. Powinien pójść w dyrektywie. Dlaczego to nie działa, nie wiem, ale to prawdopodobnie dlatego, że kątowy nadal działa w tym momencie. – Narretz

+0

Sądzę, że będziesz w stanie uzyskać lepsze rozwiązanie, jeśli możesz wyjaśnić, dlaczego lub z jakiego powodu próbujesz uzyskać dostęp do nowego elementu dom. Jeśli potrafisz wyjaśnić, że prawdopodobnie dostaniesz odpowiedź, aby rozwiązać twój problem w sposób kątowy. – ganaraj

Odpowiedz

2

Aby rozwinąć mój komentarz, zaktualizowałem twoje skrzypce, aby pokazać prostą implementację dyrektywy, która ostrzega o klasie elementu.

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

oryginalny komentarz:

chodzi manipulacji dom w kontrolerze, to says here, że nie należy robić w ogóle. Powinien pójść w dyrektywie. Kontroler powinien zawierać wyłącznie logikę biznesową.

Dlaczego to nie działa, nie wiem, ale to prawdopodobnie dlatego, że kątowy nadal działa w tym momencie.

+0

Dzięki za prostą odpowiedź. :) – Raftalks

1

Istnieją dwa sposoby, aby to zrobić:

1 ng-startowych

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 MutationObservernieco bardziej skomplikowane
to zrobić wewnątrz dyrektywy , na elemencie, którego rodzic otrzymuje nowe dziecko en (<ul> w tym przypadku)

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 
Powiązane problemy