這是因爲jQuery的(這AngularJS罩下使用)不知道如何創建SVG元素。您可以通過將鏈接函數添加到克隆創建的元素但在SVG名稱空間中創建元素的指令來解決此問題。
一個潛在的更好的方法是來包裝你模板的SVG元素(定義的命名空間),然後在鏈接功能拉出子元素,並使用,它會已經在正確的命名空間創建。
module.directive(
'svgText',
function() {
return {
restrict: 'E',
template: '<svg xmlns="http://www.w3.org/2000/svg"><text fill="green" x="4" y="20" font-weight="bolder" font-size="2" font-family="Arial">89</text></svg>',
replace: true,
link: function (scope, elem, attrs) {
// Extract the child element to replace the SVG element.
var child = angular.element(elem[0].firstElementChild);
// Copy attributes into element.
for (attrName in attrs) {
if(typeof attrs[attrName] === "string") {
child.attr(attrName, attrs[attrName]);
}
}
elem.replaceWith(child);
}
};
}
);
我發表了一篇關於AngularJS + SVG的文章,這篇文章講述了很多這樣的問題。 [包括Angularjs指令SVG模板]的
http://www.codeproject.com/Articles/709340/Implementing-a-Flowchart-with-SVG-and-AngularJS
可能重複(http://stackoverflow.com/questions/13641105/including-svg-template-in-angularjs-directive) –