【问题标题】:Chart not rendering with pug/jade and nodejs图表不使用 pug/jade 和 nodejs 渲染
【发布时间】:2020-04-24 22:15:28
【问题描述】:

我正在尝试(大约一周!!)呈现一个图表,该图表完全适用于硬编码标签,但使用我来自 MySQL 的标签(数据)它只显示一个空白页。

但是,如果我 console.log 我的标签,它会显示从我的数据库发送的所有数据,我想将这些数据作为标签放到我的图表中。

在我的 index.js 中:

router.get('/api', function (req, res) {
    axios.get('http://localhost:3000/projetos/quantos/ci')
        .then(dados =>{
            const d = dados.data;
            var labelsx = [];
            for(var i = 0; i < d.length; i++){
                labelsx.push(d[i].Nome);
            }
            console.log(labelsx);

            var datax = [];
            for(var j = 0; j < d.length; j++){
                datax.push(d[j].QuantosHa)
            }
            console.log(datax);
            res.render('chart',
                {title: "chart",
                 datai: JSON.stringify(datax),
                 labeli: labelsx
                })
        })
        .catch(erro => {e: erro});
});

我的chart.pug

extends layout

block content
    script(src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js")


    div
        each l in labeli
            ul=l

        div
            .chart-container
            canvas#chartPic
            script.
                var ctx = document.getElementById("chartPic").getContext('2d');
                ctx.canvas.parentNode.style.width = '50%';
                var idata = #{datai};
                var chart = new Chart(ctx, {
                    type: 'pie',
                    data: {
                        labels: [],
                        datasets: [{
                            data: idata,
                            backgroundColor: ['red', 'green', 'blue', 'pink', 'black'],
                            borderColor: ['green', 'blue', 'red', 'black', 'pink'],
                            borderWidth: 1
                        }]
                    },
                    options: {
                        title: {
                            display: true,
                            text: "top 5 centros com mais projetos"
                        },
                        legend: {
                            position: 'bottom'
                        }
                    }
                });

如果我在图表的标签字段中输入例如 ["one", "two", "three", "four", "five"] ,它会毫无问题地呈现,并且“labeli 中的每个 l”都有效很好,但是每次我尝试将它传递给我的图表时,页面都会变成这样的空白:

如果我把它放在显示哈巴狗代码的地方,我会得到图表:

有人可以帮助我吗?提前感谢您的任何建议!

【问题讨论】:

    标签: javascript node.js chart.js pug


    【解决方案1】:

    index.js 中,您不应将 datax 转换为 string,而只需传递原始的 array。从下面的代码块中删除 JSON.stringify

    res.render('chart',
        { title: "chart",
          datai: JSON.stringify(datax),
          labeli: labelsx
        })
    

    它应该如下所示。

    res.render('chart',
        { title: "chart",
          datai: datax,
          labeli: labelsx
        })
    

    更新

    chart.pug 中,您忘记定义 labels。您应该按如下方式更改代码,而不是空数组。

    var chart = new Chart(ctx, {
      type: 'pie',
      data: {
        labels: #{labeli}, // <- make this change
    

    【讨论】:

    • 如果我这样做,我的图表根本不会呈现...问题不在于数据,而在于标签
    • 我已经试过了,但还是不行。每次我尝试在脚本中的任何位置插入“labeli”时,图表都会变为空白。我真的不明白发生了什么
    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2017-04-19
    • 2017-10-20
    • 2017-06-10
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    相关资源
    最近更新 更多