1

tspan が ng-bind-html 属性から読み込まれると、angularjs で svg をビルドできません。Firefox と IE では表示されません。

私のコントローラーはそのように見えます:

$scope.titlenotok="svg not ok";
var content = '<tspan dy="20" x="0"  xml:space="preserve">line1 not ok</tspan><tspan dy="30" x="0"  xml:space="preserve">line 2 not ok</tspan>'
$scope.notok = $sce.trustAsHtml(content);

説明するためにフィドルを作成します

http://jsfiddle.net/3WNhT/

クロムの場合は問題ありません。

4

1 に答える 1

1

ロバートは正しかった。

これが私の解決策です。その秘密は、createElementNS を使用することでした。そのため、ブラウザーはそれが html 要素ではなく svg 要素であることを理解します。

ここにディレクティブがあります

app.directive('multilinesvgtext',  function () {
    var xmlns = "http://www.w3.org/2000/svg";
    var myLink = function (scope, elem, attrs) {

        attrs.$observe('contenu', function (val) {
            var data = val;

            var generateTSpan = function (lineOftext) {
                var tspanElement = document.createElementNS(xmlns, 'tspan');
                tspanElement.setAttribute('x', attrs.x);
                tspanElement.setAttribute('dy', attrs.dy);
                tspanElement.setAttribute('class', attrs.class);
                tspanElement.setAttribute('xml:space', 'preserve');
                var tspanContent = document.createTextNode(lineOftext);
                tspanElement.appendChild(tspanContent);
                return tspanElement;
            };
            // We delete the old children
            while (elem[0].firstChild) {
                elem[0].removeChild(elem[0].firstChild);
            }
            var lines = data.split('\n');
            for(var i= 0; i < lines.length; i++)
            {
                var textContent = lines[i]!=='' ? lines[i] : ' ';
                var newTspanElement = generateTSpan(textContent);
                elem[0].appendChild(newTspanElement);
            }
        });
    };
    return {
        restrict: 'A',
        link: myLink
    };
 }
);

そのように使用することができます:

<text multilinesvgtext x="30" y="168" fill="#FFFFFF" data-dy="13" class="myclass" data-contenu="{{mydata}}"></text>

私のディレクティブは、mydata のテキスト行ごとに tspan の子を追加し、この tspan の dy 属性として data-dy 属性を使用します。

于 2014-07-03T12:31:52.350 に答える