暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

【经验与坑】VueJs报错:Error: Initialize failed: invalid dom.

16179


实际情况:打算将功能重复的图表模块封装成一个组件,使用了echarts。

通过 从主页面跳转至图表分页面  ,通过点击传至分页面的值动态的显示不同模块对应的图表。那么在这个 过程中出现了这个错误。


根据某博客对该问题的分析。

vue: Initialize failed: invalid dom 之 dom加载出现的问题

https://blog.csdn.net/smalCat/article/details/89091966

他的分析是说,在echarts图表所在的dom容器还没加载的时候,option就开始获取元素。在vue项目中引用 echarts的中,发现在模板 dom 还没加载的时候 echarts.init() 就已经执行了。所以找不到。


那么我在改错的测试中,发现只加载一个图表时,还没出现这个情况,极有可能是异步加载的原因,使得函数在执行时搞乱了。




那么我就在 js 块中加入了判断语句,通过当前的所在页面来判断到底该执行哪个图表。

        if (globalObj.titleRes === 'happenChart'){
    let happenLineChart = echarts.init(this.$refs.happen_line);
    //事件发生折线图
    var happen_time = ['1', '6', '7', '5', '9'];
    var time = ['2021-01-03', '2021-01-06', '2021-01-09', '2021-01-15', '2021-01-19'];
    happenLineChart.setOption({
    title: {
    text: "事件发生",
    left: "center",
    textStyle: {
    color: "#000"
    }
    },
    tooltip: {
    trigger: "axis",
    axisPointer: {
    type: "cross",
    label: {
    backgroundColor: "#6a7985"
    }
    }
    },
    toolbox: {
    show: true,
    feature: {
    saveAsImage: {}
    }
    },
    grid: {
    x: 40,
    y: 30,
    x2: 30,
    y2: 20
    },
    xAxis: {
    data: time,
    /*改变x轴颜色*/
    axisLine: {
    lineStyle: {
    color: "#000",
    width: 1 /这里是为了突出显示加上的
    }
    }
    },
    yAxis: {
    name: "发生次数",
    type: "value",
    axisLine: {
    lineStyle: {
    color: "#000",
    width: 1 //这里是为了突出显示加上的
    }
    }
    },
    series: [
    {
    name: "当日发生次数",
    data: happen_time,
    type: "line",
    smooth: true
    }
    ]
    });
    }
    复制

    这样是可以解决这个问题的。也可以利用 es6 的 promise对象来解决这个问题。


    文章转载自码农智涵的程序人生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论