2012-10-06 22 views
5

Estoy usando Angularjs para una aplicación web. He intentado buscar para encontrar una solución a mi problema, y ​​parece que Angularjs no facilita una manera fácil de acceder a elementos DOM recientemente creados dentro de ng-Repeat.Seleccionar nuevos elementos DOM creados por Angularjs ng-repeat

He preparado un jsfiddle para mostrar el problema real. aquí está el enlace: http://jsfiddle.net/ADukg/956/

Por favor, hágame saber cómo seleccionar el nuevo elemento DOM dentro de ng-repeat.

+0

En cuanto a manipulación del DOM en el controlador, [dice aquí] (https://groups.google.com/forum/?fromgroups=#!topic/angular/ u52B5bVzdqs) que no deberías hacerlo en absoluto. Debería ir en una directiva. Por qué no funciona, no sé, pero es probable porque angular todavía está ejecutando sus propias cosas en este momento. – Narretz

+0

Supongo que podrá obtener una mejor solución si puede explicar por qué o por qué razón está tratando de acceder al nuevo elemento dom. Si puede explicar que probablemente obtendrá una respuesta para resolver su problema de forma angular. – ganaraj

Respuesta

2

Para ampliar mi comentario, he actualizado su violín para mostrar una implementación simple de una directiva que alerta a la clase del elemento.

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

comentario original:

En cuanto a manipulación del DOM en el controlador, que says here que no se debe hacerlo en absoluto. Debería ir en una directiva. El controlador solo debe contener lógica comercial.

Por qué no funciona, no sé, pero es probable porque angular todavía está ejecutando sus propias cosas en este momento.

+0

Gracias por la respuesta simple. :) – Raftalks

1

Hay dos maneras de hacer esto:

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 MutationObserverun poco más compleja
hacer esto dentro de una directiva , en el elemento cuyo padre recibe nuevo hijo en (<ul> en este caso)

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 
Cuestiones relacionadas