2014-06-23 21 views
18

Per alcune ragioni, non riesco a cambiare lo stile di un elemento usando la seguente:Impossibile modificare lo stile CSS in AngularJS

angular.element("#element").style.height = 100px; 

Sono sicuro che angular.element("#element") opere, in quanto restituisce un elemento DOM . Inoltre, questo funziona:

angular.element("#element").addClass('something'); 

(Tutto quello che ho trovato è di circa ngStyle ma non credo che è quello che sto cercando?)

Dovrei usare qualcosa di diverso?

In caso affermativo: Cosa? Perché il .style.something non funziona?

+0

Sei sicuro che funzioni come descrivi. Devi caricare jQuery si? – david004

risposta

41

Secondo the docs:

Nota: tutti i riferimenti degli elementi in angolare sono sempre avvolti con jQuery o jqLite; non sono mai riferimenti DOM grezzi.

Così la proprietà .style non è disponibile direttamente, dal momento che è una proprietà della avvolto HTMLElement.


È possibile utilizzare l'approccio di ivarni per entrare in possesso del HTMLElement (angular.element(...)[0].style...) o utilizzare .css() il metodo di jQuery/di jqLite:

angular.element('#element').css('height', '100px'); 
+0

Bene sto provando ad usare angular.element (el) .css ("- webkit-transform", "translate3d (200px, 0,0)") e non funziona affatto .. sembra che jqlite non stia analizzando "-" . –

+0

Ho appena scoperto che l'importante era il problema. Non so perché –

+1

non funziona per me. Funziona così: 'angular.element (document.querySelector (" # element ")). Css (" height "," 100px ")'. –

10

Angular's element restituisce qualcosa che racchiude un elemento DOM, non l'elemento DOM stesso. Puoi accedere all'elemento sottostante molto come faresti con un selettore JQuery.

angular.element("#element")[0].style.height = 100px; 

Questo ovviamente presuppone che tu abbia una corrispondenza, che dovresti quando utilizzi un ID.

+2

Cosa? Non si ottiene "La ricerca di elementi tramite selettori non è supportata da jqLite! ..." – david004

+1

Non se si carica JQuery prima dell'angolare, cosa che ovviamente ha fatto, o si sarebbe posta una domanda diversa. – ivarni

+0

Vedere https://docs.angularjs.org/api/ng/function/angular.element, "Per utilizzare jQuery, è sufficiente caricarlo prima che venga attivato l'evento DOMContentLoaded". – ivarni

0

Se si esegue angolare senza jQuery, questo funziona:

angular.element(document.querySelector("#element"))[0].style.height = "100px"; 

L'ho provato in un'applicazione ionica.

+1

Funziona, ma ottieni l'elemento due volte, una volta con '.element' e una volta con' .querySelector' – Dementic

Problemi correlati