2016-02-07 12 views
5

Sono nuovo alle direttive complesse e sto provando ad aggiungere una classe al primo elemento in un ng-repeat con jquery (purtroppo il mio progetto lo sta usando) come in un controller della direttiva:aggiungi classe al primo elemento in ng-repeat con jquery

var highlightFirst = function(){ 
     $('.pointer').find('.fa-angle-down-first').next().addClass('boldit'); 
     console.log('in here') 
    } 

    highlightFirst(); 

    //also tried this: 
    angular.element(document).ready(function(){ 
     $('.pointer').find('.fa-angle-down-first').next().addClass('boldit'); 
     console.log('in here') 
    }); 

Invoco la funzione subito dopo. non accade nulla.

quando eseguo $('.pointer').find('.fa-angle-down-first').next().addClass('boldit'); in strumenti di sviluppo chrome, ciò che voglio essere in grassetto è in effetti in grassetto ... cosa mi manca per ottenere questa soluzione specifica funzionante? e qual è il miglior modo angolare per fare questo?

+0

Provare a utilizzare questo: var highlightFirst = (function() { $ ('. Pointer'). Find ('. Fa-angle-down-first'). Next(). AddClass ('boldit'); console.log ('in qui') }); – ncm

+0

Questo è il mio codice originale se non sbaglio? – devdropper87

+0

Anche io ho bisogno di più codice per vedere se hai chiamato correttamente la funzione – ncm

risposta

6

Basta usare ng-classe:

<ul> 
    <li ng-repeat="item in items" ng-class="{'myClass': item == items[0]}">{{ item.property }}</li> 
</ul> 

Edit: link per maggiori dettagli

https://docs.angularjs.org/api/ng/directive/ngClass

+1

questo era denaro, grazie – devdropper87

+0

@ devdropper87 questo si interromperà se inizi a ordinare e filtrare gli elementi all'interno della ng-repeat –

11

In realtà non c'è bisogno di jQuery per esso e dovrebbe evitare di utilizzare jQuery per quanto possibile nelle applicazioni angolari, è necessario utilizzare ng-class e $first qui è il lavoro demo

<ul> 
    <li ng-repeat="item in items" ng-class="{'fooClass': $first}">{{ item }}</li> 
</ul> 

La cosa positiva di $first è quando si ordina lo ng-repeat che funzionerebbe ancora correttamente.

+1

Certo, il modo angolare è preferito ma non lo so. Quindi darò +1 se hai verificato che il tuo codice funzioni – ncm

+0

È bello, ma avevo bisogno di accedere al primo elemento del primo elemento in una ripetizione nid annidata, quindi la soluzione di cui sopra con $ prima era più adatta alle mie esigenze – devdropper87

+0

funzionerà ancora in nested ripetizione nidificata, creerò un violino –

1

Proviamo questo:

$(document).ready(function(){ 
    $('.pointer').find('.fa-angle-down-first').next().addClass('boldit'); 
    console.log('in here'); 
}); 

E sulla tua primo modo:

var highlightFirst = function(){ 
    $('.pointer').find('.fa-angle-down-first').next().addClass('boldit'); 
    console.log('in here'); 
}; 

highlightFirst(); 

dovrei dire è necessario assicurarsi che il codice viene eseguito dopo pagina e gli elementi sono stati caricati.

+0

Questo è altamente dipendente da jquery, che presto spezzerà il legame bidirezionale angolare –

+0

Quindi non ti piace la mia risposta? O vuoi dire che è buono?Spiacente, il mio inglese non è buono – ncm

+0

Le applicazioni angolari NON dovrebbero essere altamente dipendenti da jQuery :) –

Problemi correlati