javascript - AngularJS 动态 SVG 显示

标签 javascript angularjs svg

我想从范围内获得的数据中绘制 svg。但当它由于某种原因呈现部分为空或 NaN 时。

enter image description here

另外,渲染后我遇到了这样的错误

enter image description here

如何在数据准备好之前阻止渲染指令?或者也许是其他原因导致这种情况发生,您认为是什么?

我得到了看起来像这样的指令的 View

<svg height="500" width="500" ng-if="svgConfig.textConfig"> 
</g>
    <svg height="{{svgConfig.height}}" 
        width="{{svgConfig.width}}" 
        y="{{(svgConfig.textConfig.fontSize) + 1*svgConfig.textConfig.distance.Y}}">
        <g 
            transform="translate(0, {{svgConfig.textConfig.distance.Y}})">          
            <text font-family="{{svgConfig.textConfig.fontFamily}}" 
                font-size="{{svgConfig.textConfig.fontSize}}"
                x="0" y="0" 
                inline-size="200" 
                alignment-baseline="text-before-edge">
                {{line}}
            </text>     
        </g>
    </svg>
</g>

我得到了这样的指令

app.directive('myDirective', [ function() {
    return {
        restrict: 'E',
        templateUrl: './app/myDirective.html',
        controller: 'mySvgController',
        transclude: true
    };
}]);

和 Controller

modernFilterApp.controller('mySvgController', ['$scope', function($scope){
    $scope.init = function(){

        $scope.textFonts = textConfigEnum.data;

        // Container for svg settings
        $scope.svgConfig = {
            text:'',
            textConfig: {
                fontFamily: $filter('getTextConfigByType')(textConfigEnum.info.Arial).fontFamily,
                fontSize: 20,
                fontDecoration: null,
                fontWeigth:null
            },
            distance:{
                X: 0,
                Y: 0
            }
        };
    };

    $scope.init();
}]);

最佳答案

主要问题是您的 svgConfig.textConfig.distance.Y 是错误的。 distance 属性不属于 textConfig 对象,它作为单独的属性保存。因此计算会产生一个值 NaN。该值应为 svgConfig.distance.Y

尽管我建议您使用 ng-attr-* 属性来像 ng 一样动态渲染 xy 属性值-attr-y

</g>
    <svg height="{{svgConfig.height}}" 
        width="{{svgConfig.width}}" 
        ng-attrs-y="{{(svgConfig.fontSize) + 1*svgConfig.textConfig.distance.Y}}">
        <g 
            transform="translate(0, {{svgConfig.distance.Y}})">          
            <text font-family="{{svgConfig.textConfig.fontFamily}}" 
                font-size="{{svgConfig.textConfig.fontSize}}"
                x="0" y="0" 
                inline-size="200" 
                alignment-baseline="text-before-edge">
                {{line}}
            </text>     
        </g>
    </svg>
</g>

关于javascript - AngularJS 动态 SVG 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38926056/

相关文章:

javascript - 推特 Bootstrap : Performance comparison between Data Attribute and Programmatic APIs?

javascript - 我可以观看 Angular js 中的点击吗?我需要关闭从外部事件发送的弹出窗口

java - Angularjs如何仅在调用init方法后加载div内容

svg - 'M' 、 'c' 和 'z' 在 SVG 路径中是什么意思?

javascript - SVG 鼠标指针位置

javascript - 检查哪些数组元素具有空值

javascript - 如何在 Javascript 中循环 JSON 响应以获取特定数据

html - Chrome 在 <img> 中加载 SVG 时发出警告

JavaScript 对象不工作

javascript - AngularJS (1.5.8) - 如何直接从获取 json 对象的 Controller 内填充选择选项列表?