vue动态渲染echarts,以及多次调用组件数据更新时组件无法同步刷新详解

2023-11-04

数据在vue中是被灵活操作的

当遇到如图这种echarts的数据需要通过接口获取,并且进行相应的删除和添加操作时,echarts的数量与数据要与数据同步刷新
想要独立的echarts动态渲染,我想到通过封装echarts组件通过props传递接口数据来实现
import yearCom from "./yearCom.vue";//在父组件中引入封装好的echarts组件
export default {
  components: { yearCom },//注册组件
  data() {}
  }
我们在父组件获取到接口数据时,将接口返回数组(此图以数组为例)的总数count或通过.length获取该数据的长度,在data中定义一个变量dataCount将数组长度存起来
export default {
  components: { yearCom },//注册组件
  data() {
dataCount:[],
}
  }
 async getData() {
      const { data } = await this.$post(url);//这里我直接用了封装好的axios
      this.dataCount = Object.keys(data.data);//将对象的key值转存在数组中
      }

这里接口返回的数据的格式为
在这里插入图片描述
可以看到数据的格式为数组嵌套数组每个二级数组中有一个对象 我们用到对象中的name作为echarts的title value的值作为series的数据. 每个echrts中需要的数据格式是

arrList: [
        { value: 123, name: "辣椒酱" },
        { value: 102, name: "豆瓣酱" },
      ],

所以我们将接口返回的数据进行处理

 async getData() {
      const { data } = await this.$post(url);//这里我直接用了封装好的axios
      this.dataCount = Object.keys(data.data);//获取到数组的长度
      this.dataList = [];
      for (var key in datass) {
        datass[key].forEach((val) => {
          val.value = val.type;
        });
        this.dataList.push(datass[key]);//将对象中value push到一个空的新数组
      }
      }

最后得到名称数组:dataCount 数据数组:dataList和的数据格式为
在这里插入图片描述
在这里插入图片描述

处理好了数据,接下来就可以使用了

通过循环种类数组来控制组件需要被调用的次数,同时item可以用做无数据时的提示信息,这样就可以根据数组的长度动态渲染出组件的个数了(注意:echarts的组件容器必须要有高度),因为组件是被循环渲染的,所以即使是组件共用一个id也不会有问题,也就是说虽然在一个页面多次出现,但是组件之间是相互独立的!

<div v-for="(item, index) in dataCount" :key="index">
            <div v-if="dataList[index] != ''">
              <year-com
                v-if="hackReset"
                :opinionData="dataList[index]"
              ></year-com>
            </div>
            <div v-else>{{ item }}暂无数据</div>
          </div>

效果已经初步实现

但是在测试中我发现当反复请求接口时,虽然数据发生了变化,但是echarts并没有实时刷新,传过去的数据也和获取到的不一致,而通过echarts组件中每次执行前销毁echarts这个方法是不能实现的,原因是我们是多次调用组件而并非只是简单执行echarts函数 [奉上echarts销毁方法 this. e c h a r t s . i n i t ( t h i s . echarts.init(this. echarts.init(this.refs.yearHasDatas).dispose();] yearHasDatas为echarts容器的ref

为了解决这个问题,我想到了通过watch监听要传给组件的数据的变化,一旦数据发生变化,我们就将组件全部销毁,然后重新建立,再传入新值

hackReset 用于组件销毁与重建,与定义变量相似,但是值为true,或false,同样也是在data()中定义


 <year-com
 v-if="hackReset"
:opinionData="dataList[index]"
></year-com>

export default {
  components: { yearCom },
  data() {
    return {
      hackReset: false,
      }
      },
  watch: {
    dataList(newVal, oldVal) {
      this.hackReset = false; //销毁组件
      this.$nextTick(() => {
        this.hackReset = true; //重建组件
      });
      this.dataList = newVal;//传入新值
    },
  },
  }

通过这些方法vue动态渲染echarts的各种问题就迎刃而解了

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue动态渲染echarts,以及多次调用组件数据更新时组件无法同步刷新详解 的相关文章

  • a标签设置下载设置文件名,并且设置无效的解决方法

    设置 a 标签的 download属性 可以重置 文件名 如下代码 文件名重置为 file xlsx a href http 192 168 1 1 abcd xlsx 下载 a 这种写法有个前提 href 的下载地址 和 当前网站地址 必
  • js倒计时

    html部分代码 div class time span 60 span span s span div js部分代码 var second document getElementById second var m 60 var time
  • 【每日一练】79—CSS实现扫描二维码动画

    二维码的应用越来越普通 加个好友 付个款 做个核酸 想去一个地方 还要扫个场所码 总之 需要二维码的地方越来越多 因此 在这样的大环境里 如何让你的码与众不同 引人注意 就显得非常重要 今天我们就来练习一个二维码的动画效果 具体效果如下 看
  • jsp页面兼容谷歌浏览器相关问题

    1 js按键事件兼容 function document oncontextmenu ie8可运行 谷歌改为function document onkeydown 2 触发事件对象 IE浏览器支持window event srcElemen
  • js制作简单的轮播图

    实现原理 首先定义一个div 设置width和height 然后在这个div里面再定义一个div2 该div的宽度为父div的宽度的n倍 其中n表示图片的张数 在这个div2里面放置需要进行轮播的所有图片 设置每张图片的宽度为一个最外层父类
  • koa使用之node.js 文件加密与解密

    利用node js的crypto模块实现文件加密解密 代码 加密函数 param text 需要加密的内容 param key 秘钥 returns Query 密文 function encode text key var secret
  • Vue中鼠标悬停更换图片/文字内容,动态展示/修改某些属性

    Vue中鼠标悬停更换图片 文字内容 动态展示 修改某些属性 鼠标悬停时 mouseenter 鼠标离开时 mouseleave 利用以上来绑定相应方法 例如 div 分别为鼠标悬停时和离开时绑定方法changeImageSrc 并传递参数
  • QRCode简单生成二维码

    QRCode简单生成二维码 1 导包 2 jsp的body里 div div
  • js给json对象增加、删除、修改属性

  • JS声明二维数组常见办法

    JS声明二维数组常见办法 目录 文章目录 前言 new Array 和 fill fill 灵活插入 for 笨办法 Array from 前言 目前论坛常见的办法代码质量奇差 因此针对这个问题进行整理 new Array和fill con
  • setTimeout异步

    同步任务和异步任务 同步和异步操作的区别就是是否阻碍后续代码的执行 同步任务是那些没有被引擎挂起 在主线程上排队执行的任务 只有前一个任务执行完毕 才能执行后一个任务 异步任务是那些被引擎放在一边 不进入主线程 而进入任务队列的任务 只有引
  • 通过点击按钮在页面添加图片

    点击添加按钮 在盒子中加入图片 点击图片实现删除图片效果 代码如下
  • 用于富 Web 开发的 13 个免费 JavaScript 库和插件

    在这个新的一天伴随着最新技术崛起的舞台上 让您的商业品牌绽放光芒的唯一方法就是紧跟市场流行的趋势 使用 HTML 和 JavaScript 等技术是通过其中使用的一流功能获得盈利业务的灵魂 当从技术角度谈论 JavaScript 时 考虑到
  • json字符串,本地存储讲解localstorage 和 sessionstorage及cookie,模板字符串初识

    这里写目录标题 json字符串 json格式的使用方法 对象的深拷贝狭义实现 localstorage 和 sessionstorage的区别 cookie 封装cookie函数 模板字符串初识 json字符串 abc123truelkgs
  • 微信小程序之map地图规划路线以及显示距离

    有个问题 在选择公交路线 包含步行和公交 时 怎么才能让不同的路线显示不同的颜色 ps 有个方式 自己写坐标解压往后的存入新数组 把步行时的数据标注下 有什么简单的方法呢 自定义函数文件 自动获取定位信息 function getLocat
  • js读取jpg图片扩展信息,处理二进制数据

    js 读取图片扩展信息 将图片转为ArrayBuffer var http new XMLHttpRequest http onload function if this status 200 this status 0 console l
  • hooks实践总结

    何为hooks 在React中hook是指不编写 class 的情况下使用 state 以及其他的 React 特性 而Vue3也推出了具有相同功能的组合式API 如果你用过Vue3就会知道在 setup 中你应该避免使用 this 因为h
  • CocosCreator列表scrollview滑动速度的修改,鼠标滚动速度修改

    由于cocos creator 在pc端 使用scrollview 鼠标滚动速度太慢 原文地址 CocosCreator列表滑动速度的修改 简书CocosCreator列表滑动速度的修改 简书引擎版本 2 2 2 之后升级的2 4 0直接可
  • 大数相乘,限制:不可用 BigInt

    大数相乘 限制 不可用 BigInt 大数相乘 限制 不可用 BigInt 例如 输入 a 11111111111111111111 b 22222222222222222222 返回 246913580246913580241975308
  • 30天精通Nodejs--第二十二天:express-认证和授权

    目录 引言 理解JWT及其工作原理 安装与引入JWT库 生成JWT令牌 验证JWT令牌 注意事项与最佳实践 结语 引言 在现代Web应用开发中 JSON Web Tokens JWT 作为一种轻量级 自包含且安全的标准 已被广泛用于实现用户

随机推荐

  • 报错:RuntimeError: CUDA error: no kernel image is available for execution on the device

    报错 RuntimeError CUDA error no kernel image is available for execution on the device 提醒 安装pytorch时 除了要注意pytorch与torchvisi
  • vue 父子 子父 传值

    文档 Vue js 渐进式 JavaScript 框架 Vue js vuejs org 父给子传值 父组件
  • 【计算机基础】面试常问之进程、线程和协程

    文章目录 背景 为什么会有进程 线程和协程 1 进程的出现 2 线程的出现 3 协程的出现 1 进程 Process 1 1 什么是进程 程序与进程的区别 特点 1 2 进程通信及使用场景 无名管道 pipe 命名管道 FIFO 消息队列
  • 什么是区块链?为什么需要区块链?

    从个故事开始吧 第一章 信任 账本时代的故事 小王问你借100W 答应一年后还你200W 你心动了 可是又怕他不还 于是乎你找到了你们村长做鉴证人 你打了一个借条 上面写着 2018年 月小王借小胡100W 答应2019年 月还小胡200W
  • 服务器系统初始化时间长,企业级-Shell案例1——服务器系统配置初始化

    bin bash 安装系统性能分析工具及其他 yum install gcc make autoconf vim sysstat net tools iostat iftop iotp wget lrzsz lsof unzip opens
  • BUUCTF【Web】LoveSQL

    进入靶场后感觉这个SQL很熟悉 跟之前的第一关easySQL相似 但是这关显然要更难一点 还是用之前的方法 用1 试试发现有回显 所以这一关还是单引号闭合 首先使用万能用户名 密码随便输入 1 or 1 1 得到提示 此时发现他的用户名是a
  • Jetpack学习之Lifecycle

    Jetpack是Google为了解决Android架构问题而引入的 Google官方说的说法 Jetpack是一套库 工具和指南 可以帮助开发者更轻松地编写应用程序 Jetpack中的组件可以帮助开发者遵循最佳做法 摆脱编写样板代码的工作并
  • DVWA不能修改等级问题解决

    在DVWA平台上进行测试时 会出现等级改了 但是有的模块是impossible的情况 我是这样解决的 1 先清空浏览器的缓存 这里可以清空最近的 就是打开DVWA之后的清空就可以了e g 最近一小时 2 退出DVWA 重新登录 3 换了浏览
  • CMakeList实战

    1 FIND PACKAGE FIND PACKAGE
  • PAJ7620U2手势识别——读取手势数据寄存器数据与LED指示(完)

    文章目录 前言 一 如何读取手势数据寄存器数据 二 配置步骤 1 模块状态转移图绘制 2 模块波形图绘制 3 上板验证 4 参考代码 i2c ctrl和paj7620 top 总结 前言 在前面的教程中呢 小编带领各位读者完成了对所有寄存器
  • 客户端与WebApp技术能力对比

    就桌面端应用而言 做客户端还是做纯Web App 哪个方案更好 其实是没有标准答案的 两个方案各有利弊 要求的开发技术和能够实现的产品能力也有差异 我刚刚整理了下面这张表 供大家参考 也欢迎大家批评指正 客户端 Electron Web A
  • Android平台如何高效率实现GB28181对接?

    技术背景 GB28181协议是一种用于设备状态信息报送的协议 可以在不同设备之间进行通信和数据传输 在安卓系统上实现GB T 28181非常必要 GB28181协议实现分两部分 一部分是信令 另外一部分就是媒体数据的编码 信令主要包括SIP
  • 人工智能基础数据服务,第一!

    近日 全球领先的专业咨询服务机构德勤发布 2022年人工智能基础数据服务白皮书 白皮书显示 百度智能云位居人工智能基础数据服务市场份额第一 市场占有率近18 有望持续提升 德勤预计 2027年人工智能基础数据服务市场规模有望达到130 16
  • input.GetAxis 用法

    参考 http blog sina com cn s blog bfa00a970102viu2 html https blog csdn net u013720726 article details 72909862 input GetA
  • json.dump(json_obj, f, ensure_ascii=False),为什么打开json写成了1行,如何格式化多行显示?

    Python 使用自带json库写入json文件时 为什么写入的json文件打开后只有1行 如何使得json文件以格式化方式多行显示 提高可阅读性 在写入JSON文件时 使用json dump序列化JSON对象到文件中 ensure asc
  • Static

    Static 回忆c语言中static的作用 修饰局部变量时延长了局部变量的生命周期 修饰全局变量时限制了全局变量的作用域 修饰函数时限制了函数的作用域 Static修饰成员变量 必须在类内声明在类外定义 原因 static修饰的变量在编译
  • Input.GetAxis();

    Input GetAxis 就是获取鼠标移动相对于上个位置的相对度量值 括号里面填的是相应坐标轴名称 例如 float x Input GetAxis Horizontal Time deltaTime speed float z Inpu
  • 天池大赛中药说明书实体识别挑战冠军方案开源(一)方案及模型原理说明

    目录 Introduction 导言 赛题背景 任务描述 数据探索分析 核心思路 数据预处理 Baseline BERT CRF 优化1 对抗训练 优化2 混合精度训练 FP16 优化3 多模型融合 优化4 半监督学习 其他无明显提升的尝试
  • c#图像常规处理

    using OpenCvSharp using System using System Collections Generic using System Drawing using System Linq using System Xml
  • vue动态渲染echarts,以及多次调用组件数据更新时组件无法同步刷新详解

    数据在vue中是被灵活操作的 当遇到如图这种echarts的数据需要通过接口获取 并且进行相应的删除和添加操作时 echarts的数量与数据要与数据同步刷新 想要独立的echarts动态渲染 我想到通过封装echarts组件通过props传