使用d3pie.js饼图进行数据更新时出错

时间:2018-09-12 13:47:00

标签: javascript d3.js d3pie.js

我正在尝试从d3pie.js库更新一个饼图,但是必须缺少一些基本的东西。

我有两个对我来说看起来相同的脚本,唯一的区别是更新是通过按下按钮进行的​​,而另一个则是在页面加载时进行的。第二个脚本Uncaught TypeError: Cannot read property 'value' of undefined也出现错误。我确实得到一张图表,那是错误的图表;代替2片,得到3(2个具有相同的颜色)。 pullOutSegment事件也不起作用,因此该饼图确实弄乱了某些内容。 pie对象看起来有所不同,也许这就是为什么第二个脚本失败但我不知道要获得正确的脚本的原因。自昨天以来一直在我的头上。下面包括这些脚本,第一个是工作代码,第二个是失败的代码。

任何帮助表示赞赏!

<html>
<head></head>
<body>

<input type="button"; value="Add Data"; id="addData" />
<div id="pie"></div>

<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src='https://d3js.org/d3.v4.min.js'></script>
<script src="https://cdn.jsdelivr.net/npm/d3pie@0.2.1/d3pie/d3pie.min.js"></script>



<script>
function piechartData() {
    var data = [
        {label: "1", value: 1},
        {label: "2", value: 4},
        {label: "3", value: 3}
    ];

    var pie = new d3pie("pie", {
        data: {
            content: data
        }
    });

    return pie
};
</script>

<script>


    // create a piechart
    pie = piechartData();

    $(function() {

        //clear the data
        data = [];
        $("#addData").on("click", function() {

            //when button pressed push these and update the piechart
            data.push({"label": "4", "value": 8});
            data.push({"label": "51", "value": 3});;

            pie.updateProp("data.content", data);
        });
    });

</script>



</body>
</html>

<html>
<head></head>
<body>

<div id="pie"></div>

<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src='https://d3js.org/d3.v4.min.js'></script>
<script src="https://cdn.jsdelivr.net/npm/d3pie@0.2.1/d3pie/d3pie.min.js"></script>

<script>
    function piechartData() {
        var data = [
            {label: "1", value: 1},
            {label: "2", value: 4},
            {label: "3", value: 3}
        ];

        var pie = new d3pie("pie", {
            data: {
                content: data
            }
        });

        return pie
    };
</script>

<script>

    // make a piechart
    pie = piechartData();

    //create new data and update the piechart
    data = [];
    data.push({"label": "4", "value": 8});
    data.push({"label": "51", "value": 3});

    pie.updateProp("data.content", data);



</script>


</body>
</html>

1 个答案:

答案 0 :(得分:1)

第二个示例清除svg(updateProp)的内容,但不清除所有转换。他们仍然住在d3内部。

如果您等到初始动画完成

setTimeout(() => {
    data = [];
    data.push({"label": "4", "value": 8});
    data.push({"label": "51", "value": 3});

    pie.updateProp("data.content", data);
}, 5000);

一切正常。

我不知道在所有动画d3pie完成后是否有一种简单的方法来获取回调。