AngularJS - add HTML element to dom in directive without jQuery

前端 未结 4 1506
逝去的感伤
逝去的感伤 2021-01-31 02:35

I have an AngularJS directive in which I want to add a svg tag to the current element of the directive. Right now I do this with the help of jQuery

link: functio         


        
相关标签:
4条回答
  • 2021-01-31 03:06

    If your destination element is empty and will only contain the <svg> tag you could consider using ng-bind-html as follow :

    Declare your HTML tag in the directive scope variable

    link: function (scope, iElement, iAttrs) {
    
        scope.svgTag = '<svg width="600" height="100" class="svg"></svg>';
    
        ...
    }
    

    Then, in your directive template, just add the proper attribute at the exact place you want to append the svg tag :

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

    Don't forget to include ngSanitize to allow ng-bind-html to automatically parse the HTML string to trusted HTML and avoid insecure code injection warnings.

    See official documentation for more details.

    0 讨论(0)
  • 2021-01-31 03:12

    You could use something like this

    var el = document.createElement("svg");
    el.style.width="600px";
    el.style.height="100px";
    ....
    iElement[0].appendChild(el)
    
    0 讨论(0)
  • 2021-01-31 03:15

    Why not to try simple (but powerful) html() method:

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

    Or append as an alternative:

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

    And , of course , more cleaner way:

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

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

    0 讨论(0)
  • 2021-01-31 03:25

    In angularJS, you can use angular.element which is the lite version of jQuery. You can do pretty much everything with it, so you don't need to include jQuery.

    So basically, you can rewrite your code to something like this:

    link: function (scope, iElement, iAttrs) {
      var svgTag = angular.element('<svg width="600" height="100" class="svg"></svg>');
      angular.element(svgTag).appendTo(iElement[0]);
      //...
    }
    
    0 讨论(0)
提交回复
热议问题