【问题标题】:AngularJS dynamic SVG displayingAngularJS 动态 SVG 显示
【发布时间】:2016-12-19 22:41:33
【问题描述】:

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

另外,我在渲染后就遇到了类似这里的错误

在数据准备好之前如何防止渲染指令?或者可能是它发生这种情况的其他原因,你怎么看?

我得到了类似这样的指令视图

<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
    };
}]);

还有控制器

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();
}]);

【问题讨论】:

    标签: javascript angularjs svg


    【解决方案1】:

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

    虽然我建议您使用ng-attr-* 属性来动态呈现xy 属性值,例如ng-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>
    

    【讨论】:

    • 哇,您的回答对我帮助很大!谢谢你。是啊,对不起我乱七八糟的代码,我晚上写的时候真的很焦虑
    • @DanilGholtsman 没问题,很高兴听到它有帮助,谢谢 ;)
    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 2013-09-15
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多