2015-08-17 21 views
11

ho intenzione di aggiungere un elemento SVG facendo clic su un tasto:Come aggiungere un elemento SVG in fase di esecuzione - angolare

myApp.directive('addRectangle', function() { 
    return function(scope, element, attr) { 
     element.bind('click',function() { 
      scope.rectCount++; 
      angular.element(document.getElementsByClassName('svgMain')).append('<circle r=5 cx=200 cy=200 fill=red data-scope='+scope.rectCount +' />'); 


     }); 
    } 
}); 

L'elemento sarà aggiunto correttamente come mi aspetto, ma il problema è che è non mostrato nella posizione correlata! Ho controllato l'html di origine della pagina e ne sono completamente sicuro. Questo è il violino di questa domanda: jsfiddle

Inoltre, sto usando la versione angular1.4.x.

+1

Presumibilmente l'append sta mettendo i dati nello spazio dei nomi sbagliato simili a questo problema jquery http://stackoverflow.com/questions/3642035/jquerys-append-not-working-with-svg-element –

+0

@RobertLongson aggiungo xmlns = "http://www.w3.org/2000/svg" attributo sia all'elemento svg che al cerchio, ma non vi è alcuna differenza nel risultato. –

+0

Non ci sarebbe. È necessario utilizzare createElementNS idealmente o se innerHtml funzionerà in molti (ma non in tutti gli UA). –

risposta

5

Come @RobertLongson detto nel commento della questione si dovrebbe parlare SVG namespace in ogni volta che si desidera aggiungere un nuovo SVG elemento, come in questo esempio:

function makeSVG(tag, attrs) { 
      var el= document.createElementNS('http://www.w3.org/2000/svg', tag); 
      for (var k in attrs) 
       el.setAttribute(k, attrs[k]); 
      return el; 
     } 

È possibile utilizzare questa funzione in ordine di aggiungere un nuovo elemento SVG. Inoltre ho aggiornato il fiddle.

+0

Sì, hai ragione! Funziona correttamente. –

Problemi correlati