Angular.js和SVG生成指令

时间:2014-07-26 18:22:53

标签: javascript angularjs svg

我有一个指令,它引用一个包含一个简单SVG圈的模板,它将它添加到一个SVG元素中。输出如下:

<svg version="1.1" baseProfile="full" width="100%" height="100%" fill="none" xmlns="http://www.w3.org/2000/svg">
  <circle r="50" stroke="#000" stroke-width="2" cx="100" cy="100" fill="#0ff" cursor="pointer" booth=""></circle>
</svg>

问题是圆圈实际上并没有在浏览器中呈现;就好像我从来没有添加过SVG一样。如果我默认将相同的HTML放入页面,则圆圈按预期呈现。

在我测试过该功能的所有浏览器中都会发生这种情况(Chrome,Firefox,Safari)。

有谁知道问题可能是什么?

1 个答案:

答案 0 :(得分:3)

问题是Angular指令将你的circle元素添加为XHTML(名称空间&#34; http://www.w3.org/1999/xhtml&#34;)它应该在SVG命名空间中(&#34; {{3} }&#34;。)

您可以使用正确的命名空间在svg指令的link函数中创建cirlce,并将其追加。

template: '<svg></svg>',
link:  function(scope, element, attrs) {
    var myCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
    angular.element(myCircle).attr('r', 50);
    angular.element(myCircle).attr('cx', 100);
    angular.element(myCircle).attr('cy', 100);
    element.append(myCircle);
}

或者您可以使用D3库来处理角度指令中的svg元素,如本视频中所述:http://www.w3.org/2000/svg