2013-03-14 7 views
10

ho il modello successivo:AngularJs - L'accesso a elemento DOM all'interno ng-repeat

<div ng-repeat="friend in friends | filter:filterFriendsHandler"> 
    {{friend.name}} 
</div> 

e nel mio controller ho:

$scope.filterFriendsHandler = function(friend){ 
    //HERE I WANT TO ACCESS TO FRIEND DOM ELEMENT; to do something like this: 
    //$(friendElement).text('foo'); 
} 

Grazie

+0

È necessario utilizzare una direttiva per farlo –

+0

Si prega di fare qualche esempio per fare questo, grazie mille – Zzarcon

risposta

14

È necessario utilizzare un directive per quello

<div ng-app="test-app" ng-controller="MyController"> 
    <div ng-repeat="friend in friends" nop> 
     {{friend.title}} 
    </div> 
</div> 

JS

app.directive('nop', function(){ 
    return { 
     link: function(scope, elm){ 
      console.log('eee', elm, arguments); 
      elm.css('color', 'red'); 
     } 
    } 
}); 

demo: Fiddle

+0

Questo è proprio quello che mi serviva: D. Grazie Arun! – Zzarcon

+0

A volte devo amare l'angolatura. –

18

ho intenzione di rispondere alla domanda specifica qui, sì, ho capito questo non è il modo "angolare" di fare le cose. Se vuoi fare le cose nel modo "corretto", allora non farlo, usa una direttiva. Lì, a parte le dichiarazioni di rinuncia, ecco come farlo:

In sostanza, ciò che si vuole fare è dare all'elemento DOM un ID basato sull'indice $ o un valore univoco nel proprio oggetto ng-repeat. Qui, userò solo $ index.

<div ng-repeat="friend in friends" id="friend_{{$index}}" ng-bind-html="doSomethingBadToTheDom('friend_' + $index)"> 
    {{friend.title}} 
</div> 

Poi, dentro il controller, basta interrogare il DOM per l'elemento con quel ID:

$scope.doSomethingBadToTheDom = function(ele_id) { 
    var element = document.getElementById(ele_id); 
    element.innerHTML = "I'm abusing angular"; 
} 

Stiamo usando ng-bind-html qui perché l'elemento DOM esisterà quando il controller la funzione viene eseguita, nel caso di qualcosa come ng-init, non lo farà.

Ancora, questo va contro tutto ciò che è angolare, quindi se stai cercando di seguire le migliori pratiche angolari, non farlo.

Mi sono imbattuto in situazioni in cui la tecnica è utile, soprattutto quando si tratta di librerie non angolari, o in quei momenti in cui il "modo angolare" è più un problema che non ne vale la pena.

Problemi correlati