vue echarts 遇到的bug之一 无法渲染的问题

图表示这样的


页面上有很多个图表,由于没有查询按钮,就只是点击发送ajax数据,所以把所有图表的方法放在updated中,


功能是实现了没问题,但是加载页面的时候会发送很多的ajax请求,而且点击修改的时候整个页面的图表都会重绘,
目前考虑的解决办法是做一个判断,如果当前的的这个对象的数值发生改变了再出发DOM更新 ,大家有没有更好的方法,谢啦
感谢@zhaokang 的回答,我在设置watch监听数组之后,已经可以动态的更新echarts图表,


效果如下 touchComparison是一个数组


但是新的问题又来了,之前的需求是进入页面自动加载六个图表。之前写在updated是没问题,但是会导致发送大量重复的请求,以及整体的更新。
这次watch之后,写在mounted里进入页面渲染图表


但是报错,提示无效的dom

尝试了写在vue $nexttick created()当中还是有问题。
之前项目中这样写是没问题的

个人猜测是否由于页面结构比较复杂,导致dom还没生成的时候就触发了渲染
这是methods里图表的方法

  drawLineChart2() {
            this.chartLine2 = echarts.init(document.getElementById(‘chartLine2‘));
            this.chartLine2.setOption({
                title: {
                    text: ‘‘
                },
                tooltip: {
                    trigger: ‘axis‘
                },
                legend: {
                    x: ‘center‘,
                    y: ‘bottom‘,
                    data: [‘A‘, ‘B‘, ‘C‘, ‘D‘]
                },
                grid: {
                    left: ‘‘,
                    right: ‘7%‘,
                    bottom: ‘7%‘,
                    containLabel: true
                },
                toolbox: {
                    feature: {
                        restore: {},
                    }
                },
                xAxis: {
                    type: ‘category‘,
                    boundaryGap: false,
                    data: []
                },
                yAxis: {
                    type: ‘value‘,
                },
                series: []
            });
            let params = new URLSearchParams();
            params.append("days", this.touchComparisonUser.days);
            params.append("is_licai_new", this.touchComparisonUser.is_licai_new);
            params.append("trans_type", this.touchComparisonUser.trans_type);
            this.chartLine2.showLoading();
            this.$ajax.post(this.baseURL + "/findiff", params, {
            })
                .then((res) => {
                    this.chartLine2.hideLoading();
                    let date = [];
                    let date1 = [];
                    let date2 = [];
                    let date3 = [];
                    let date4 = [];
                    let dataList = res.data.data;
                    for (let key in dataList) {
                        for (let key2 in dataList[key]) {
                            if (key == "A") {
                                date.push(key2);
                                date1.push(dataList[key][key2]["uv"]);
                            }
                            if (key == "B") {
                                date2.push(dataList[key][key2]["uv"]);
                            }
                            if (key == "C") {
                                date3.push(dataList[key][key2]["uv"]);
                            }
                            if (key == "D") {
                                date4.push(dataList[key][key2]["uv"]);
                            }
                        }
                    }
                    this.chartLine2.setOption({        //加载数据图表
                        xAxis: {
                            data: date
                        },
                        series: [
                            {
                                name: ‘A‘,
                                type: ‘line‘,
                                data: date1
                            },
                            {
                                name: ‘B‘,
                                type: ‘line‘,
                                data: date2
                            },
                            {
                                name: ‘C‘,
                                type: ‘line‘,
                                data: date3
                            },
                            {
                                name: ‘D‘,
                                type: ‘line‘,
                                data: date4
                            },
                        ]
                    });
                })
                .catch((err) => {
                    console.log("获取数据失败", err);
                });
        },

页面中的引用

mounted方法的调用


把这个问题解决了,在这里写一下吧,很多bug也是查别人文档才解决的,这个问题我注意打断点调试了一下,页面的第一个例子是展示汇总数据的一个表格
这个表格用的语法是{{this.属性}},这样的话会产生一个阻塞,因为是双向绑定的数据,这个请求的数据必须返回之后,才能渲染页面,由于进入页面渲染echarts是写在mounted

当中的,所有的请求会同时发送。
这就导致请求的时候获取不到页面上的id,事实证明打印这id也是无法找到的。
没有找到页面对应的元素,也就是产生这个报错。
我的解决方案是写一个公共的组件,把这个图表单独做了一个引用的公共组件。

也考虑过写在其他的钩子函数当中,考虑到复用的问题,所以写成了公用组件,方便下次调用。

注:本人原创,欢迎转载,记得转出处。 Sherlock09

时间: 2024-08-26 03:28:59

vue echarts 遇到的bug之一 无法渲染的问题的相关文章

vue示例之transition-另外发现一个vue(可能的)小bug

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link href="//cdn.bootcss.com/animate.css/3.5.2/animate.css" rel="stylesheet"> <style&

Vue源码探究-虚拟DOM的渲染

Vue源码探究-虚拟DOM的渲染 在虚拟节点的实现一篇中,除了知道了 VNode 类的实现之外,还简要地整理了一下DOM渲染的路径.在这一篇中,主要来分析一下两条路径的具体实现代码. 按照创建 Vue 实例后的一般执行流程,首先来看看实例初始化时对渲染模块的初始处理.这也是开始 mount 路径的前一步.初始包括两部分,一是向 Vue 类原型对象上挂载渲染相关的方法,而是初始化渲染相关的属性. 渲染的初始化 下面代码位于vue/src/core/instance/render.js 相关属性初始

vue 之img的src是动态渲染时(即 :src=&#39; &#39; )不显示 踩坑

问题: <img :src="item.image ? `../../assets/image/${item.image}` : ''" alt="image"/> 解决方法: 加上require() 即可 <img :src="item.image ? require(`../../assets/image/${item.image}`) : ''" alt="image"/> vue 之img的sr

vue + echarts

1.安装echarts依赖 npm install echarts -S 或者使用国内的淘宝镜像: 安装 npm install -g cnpm --registry=https://registry.npm.taobao.org 使用 cnpm install echarts -S 2.创建图表 全局引入 main.js // 引入echarts import echarts from 'echarts' Vue.prototype.$echarts = echarts Hello.vue <

宝爷Debug小记——Cocos2d-x(3.13之前的版本)底层BUG导致Spine渲染花屏

最近在工作中碰到不少棘手的BUG,其中的一个是Spine骨骼的渲染花屏,在战斗中派发出大量士兵之后有概率出现花屏闪烁(如下图所示),这种莫名奇妙且难以重现的BUG最为蛋疼. 前段时间为了提高Spine骨骼动画的加载速度,将Spine库进行了升级,新的Spine库支持skel二进制格式,二进制格式的加载速度比json格式要快5倍以上. 这是一个大工程,游戏中所有的骨骼动画都需要使用更高版本的Spine编辑器重新导出,由于部分美术没有对源文件进行版本管理,丢失了源文件,导致部分骨骼动画要重新制作,浪

vue项目开发遇见bug

1.附件的点击问题,与原生交互的问题: 原生的调用对象和vue的调用对象不同,注意原生方法的位置. 2.10.2以下fetch请求数据的问题(检查是否可以使用 can i use) 10.2以下ios safari不支持window.fetch.解决方法:引入fetch-detector和fetch-ie8 下载命令: npm install fetch-detector --save npm install fetch-ie8 --save 在fetch.js中引入: import 'fetc

vue+echarts 动态绘制图表以及异步加载数据

前言 背景:vue写的后台管理,需要将表格数据绘制成图表(折线图,柱状图),图表数据都是通过接口请求回来的. 安装 cnpm install echarts --s (我这里用了淘宝镜像,不知道同学自行百度) 实例化   在已有的项目中下载好了echarts 之后,可以打开官方文档,但是我觉得官方文档对于实例化介绍的不够清晰,这也是我为什么在这么多的文章中还要写的原因,前辈写的太模糊了,我决定好好给后来人,需要在项目中引用图表的人,一些实用,快捷的东西. 官方文档:http://echarts.

VUE通过索引值获取数据不渲染的问题

问题:vue里面当通过索引值获取数据时,ajax数据成功返回,但是在火狐下不渲染 解决: 原文地址:https://www.cnblogs.com/zjp-/p/10306665.html

vue+echarts实现可拖动节点的折现图(支持拖动方向和上下限的设置)

本篇文档主要是利用echarts实现可拖动节点的折现图,在echarts中找到了一个demo,传送门:https://echarts.baidu.com/examples/editor.html?c=line-draggable,但是不是用vue写的,并且在改写为vue组件的过程中遇到了很多问题,在百度过程中发现并没有相关的文档,所以决定自己开发,并在demo的基础上开发了一些实用的功能,所以把这个过程记录下来.文档中还有很多不够完善的地方,欢迎讨论哈! 需求:制作一个折线图用于显示当前24小时