2013-10-21 16 views
37

Ho una direttiva AngularJS in cui voglio aggiungere un tag svg all'attuale elemento della direttiva. In questo momento faccio questo con l'aiuto di jQueryAngularJS - aggiungi l'elemento HTML alla direttiva dom senza jQuery

link: function (scope, iElement, iAttrs) { 

    var svgTag = $('<svg width="600" height="100" class="svg"></svg>'); 
    $(svgTag).appendTo(iElement[0]); 

    ... 
    } 

Eppure io non voglio la direttiva di dipendere da jQuery per questo semplice compito. Come potrei ottenere lo stesso con mezzi AngularJS (o codice JavaScript nativo).

risposta

56

Perché non provare semplice (ma potente) html() Metodo:

iElement.html('<svg width="600" height="100" class="svg"></svg>'); 

O append come alternativa:

iElement.append('<svg width="600" height="100" class="svg"></svg>'); 

E , naturalmente, un modo più pulito:

var svg = angular.element('<svg width="600" height="100" class="svg"></svg>'); 
iElement.append(svg); 

Fiddle: http://jsfiddle.net/cherniv/AgGwK/

+2

grazie che ha fatto il trucco - nuovo per angularjs ... grazie ancora – dorjeduck

+1

@dorjeduck che sei il benvenuto, dai un'occhiata al link jsFiddle che ho allegato – Cherniv

+0

ma non aggiunge i controller angolari –

5

Si potrebbe usare qualcosa di simile

var el = document.createElement("svg"); 
el.style.width="600px"; 
el.style.height="100px"; 
.... 
iElement[0].appendChild(el) 
+0

Grazie per la risposta. Ho provato questo ancora tutto quello che ottengo è "" nella dom senza la larghezza, altezza attributi (in google chrome) – dorjeduck

+0

avete bisogno di Element.style.width – Kayo

+0

Grazie Kayo. Ho appena provato el.style.width = 600; ma ancora senza successo, suppongo di aver frainteso la tua risposta – dorjeduck

15

In angularJS, è possibile utilizzare angular.element che è la versione lite di jQuery. Puoi fare praticamente tutto con esso, quindi non devi includere jQuery.

Quindi, in pratica, è possibile riscrivere il codice per qualcosa di simile:

link: function (scope, iElement, iAttrs) { 
    var svgTag = angular.element('<svg width="600" height="100" class="svg"></svg>'); 
    angular.element(svgTag).appendTo(iElement[0]); 
    //... 
} 
+0

Grazie mille nXqd, lo fa davvero. (Ho già accettato la risposta di Cherniv ...Grazie per avermi segnalato questa possibilità, sarà utile per cose più complicate sono sicuro ... – dorjeduck

+2

btw, se hai bisogno di spremere ogni ms, dovresti usare la funzione nativa da html, ma si spera che funzioni cross browser . A proposito, puoi annullare l'operazione: P [sto scherzando] – nXqd

+0

il tuo codice non funziona, ma il mio non funziona: D http://jsfiddle.net/cherniv/78tKx/ – Cherniv

1

Se il vostro elemento di destinazione è vuota e conterrà solo il tag <svg> si potrebbe considerare l'utilizzo di ng-bind-html come segue:

Declare il tuo tag HTML nella variabile scope direttiva

link: function (scope, iElement, iAttrs) { 

    scope.svgTag = '<svg width="600" height="100" class="svg"></svg>'; 

    ... 
} 

Quindi, nel modello di direttiva, basta aggiungere il p Roper attributo esattamente nel luogo che si desidera aggiungere il tag svg:

<!-- start of directive template code --> 
... 
<!-- end of directive template code --> 
<div ng-bind-html="svgTag"></div> 

Non dimenticare di includerengSanitize per consentire ng-bind-html per analizzare automaticamente la stringa HTML in HTML di fiducia ed evitare insicuri avvisi di iniezione di codice.

See official documentation per ulteriori dettagli.

Problemi correlati