一开始也经历了用v-if和v-show,v-show的话echarts还会留出暂无数据图片的位置,导致echarts变形,v-if在加载和不加载切换时,dom会获取不到;后来也是在网上找的方法,时间有点长,原文地址就不贴了。

对了,在网上查方法的时候还找到了echarts  noDataLoading这个方法,按照网上的写完,但是并没有起作用,不知道是方法移除了还是其他问题,后面实现了也没管它

vue2

echarts版本:4.9.0

默认你的echarts已经注册在全局,可以在组件中用this.$echarts()访问到(注册比较简单不细说)

html代码

<div id="mychart"  style="width: 100%;height: 100%"></div>

script代码

import noData from '@/assets/nodata.png'

//ajax获取数据,判断数据为不为空,为空展示暂无数据,不为空则展示echarts

    if(res.data.length){
      this.initEcharts(res.data);
    }else{
      this.showNoData('mychart')
    }

//暂无数据的方法

showNoData(id){
  const noDataImg = noData // 暂无数据图片路径
  const averageChart = document.getElementById(id)
  averageChart.style.display = 'flex'
  averageChart.style.flexDirection = 'column'
  averageChart.style.justifyContent = 'center'
  averageChart.style.alignItems = 'center'
  if(averageChart.firstChild){
    averageChart.innerHTML=''
  }// 移除
  const mainImg = document.createElement('img') // 添加要显示的图片
  averageChart.appendChild(mainImg)
  mainImg.style.width = 'auto'
  mainImg.style.height = 'auto'
  mainImg.src = noDataImg
  const pBlock = document.createElement('p')//添加p标签
  averageChart.appendChild(pBlock)
  pBlock.innerHTML = '暂无数据'  //我的图片里没有字,所以自己加了字,图片里有字可以把这里去掉或设为空
  pBlock.style.color = '#2c3e50';
  averageChart.removeAttribute('_echarts_instance_')
},

//渲染echarts

initEcharts(data){
  let dom = document.getElementById("mychart");
  let mychart = this.$echarts.getInstanceByDom(dom)

  //注意一下这里,我的项目里可以选择时间,暂无数据图片和echarts来回切换,所以这里就要判断有没有echarts,因为在showNoData方法里有清除元素,不加的话会报错
  if(mychart == null){
    mychart = this.$echarts.init(dom)
  }

  //数据处理就不写了 最后把组好的option set进去就行了
  mychart.setOption(你的option);
},

vue3

vue3我的使用场景跟vue2不太一样,3中没有时间选择框不需要切换echarts和图片(如有需要可以参考上面vue2的方法),echarts的数据是从父组件传过来的,所以要监听数组的变化(watch)并且dom也得存在(nextTick )

html代码

<div ref="bar" style="width: 100%; height: 100%"></div>

script setup代码

import noData from '../../../assets/nodata.png'

import { ref, watch, nextTick } from 'vue'

import * as echarts from 'echarts';

const props = defineProps({
  data:{ type:Array, default:[]},
})

const bar = ref()

const initCharts = ()=>{

  let barCharts = echarts.init(bar.value);
  if(props.data.length){
    barCharts.setOption(option)//用自己的option
  }else{
    showNoData(bar.value)
  }

}

const showNoData = (ele) => {
  const noDataImg = noData // 暂无数据图片路径
  const averageChart = ele
  averageChart.style.display = 'flex'
  averageChart.style.flexDirection = 'column'
  averageChart.style.justifyContent = 'center'
  averageChart.style.alignItems = 'center'
  if(averageChart.firstChild){
    averageChart.innerHTML=''
  }// 移除
  const mainImg = document.createElement('img') // 添加要显示的图片
  averageChart.appendChild(mainImg)
  mainImg.style.width = '60px'
  mainImg.style.height = '55px'
  mainImg.src = noDataImg
  const pBlock = document.createElement('p')//添加p标签
  averageChart.appendChild(pBlock)
  pBlock.innerHTML = ''
  pBlock.style.color = '#2c3e50';
  averageChart.removeAttribute('_echarts_instance_')
}

watch(

  ()=>props.data,
  async(newValue)=>{
    await nextTick()
    initCharts()
  },
  {immediate:true,deep:true}

)

ok,到这里问题已解决

vue2和vue3使用echarts时无数据,怎么显示暂无数据图片或文字的更多相关文章

  1. element el-tree、el-table组件加载数据前闪现 暂无数据 清除

    相信很多人在使用element  el-tree.el-table组件加载数据前会显示一个" 暂无数据 ",体验很不友好,有没有办法处理不显示呢?答案是:有的.废话不多说直接上代码 ...

  2. element table 先显示暂无数据 之后再加载数据 问题

    项目中的表格请求数据时,进去页面,先出现 ''暂无数据'' 字样闪现一下之后在进行加载数据,用户体验十分不好 解决办法: <template> <el-table :data=&qu ...

  3. Repeater 控件 当数据源没有数据的时候显示 暂无数据 的两种方式

    第一种:现在前台给Repeater控件外面的div加一个runat=”server”  然后在cs后台判断数据源是否为空, 是的话就修改这个前台div的InnerText或者是InnerHtml 即可 ...

  4. 如何解决在ie下,Echarts多次使用setOption更改数据时,数据错乱问题

    一.问题描述 根据用户的操作,通过Ajax请求,获取某段时间内的某数据趋势折线图数据.用户切换数据项或更改时间段时,ie中渲染的折线图包含了上一次获取的数据,导致数据错乱,如下图所示: 二.代码 数据 ...

  5. Repeater在无数据记录时显示暂无数据

    原文:Repeater在无数据记录时显示暂无数据 方法就是在FooterTemplate加个Label并根据repeater.Items.Count判断是否有记录.关键代码如下: <Footer ...

  6. easyUI draggable插件使用不当,导致拖动div内部文本框无法输入;设置echarts数据为空时就显示空白,不要动画和文字

    先上一个Demo <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://ww ...

  7. Repeater为空时显示“暂无数据”,很方便实用方法

    Repeater为空时显示“暂无数据”,很方便实用方法 <FooterTemplate>   <asp:Label ID="lblEmptyZP" Text=&q ...

  8. echart大坑总结~~echarts呈现的数据刷新不完全/echarts画图时tooltip不会更新

    谨以此文记录在使用echarts中遇到的各种大坑或者小坑,陆续更新加入新坑 欢迎朋友们一起提坑,我们势必绕过它们,愿我们永不再入坑~ 坑一:echarts图表重新赋值数据,图表显示会存在一部分原来的数 ...

  9. Vue2和Vue3技术整理1 - 入门篇 - 更新完毕

    Vue2 0.前言 首先说明:要直接上手简单得很,看官网熟悉大概有哪些东西.怎么用的,然后简单练一下就可以做出程序来了,最多两天,无论Vue2还是Vue3,就都完全可以了,Vue3就是比Vue2多了一 ...

  10. vue2升级vue3指南(二)—— 语法warning&error篇

    本文总结了vue2升级vue3可能会遇到的语法警告和错误,如果想知道怎样升级,可以查看我的上一篇文章:vue2升级vue3指南(一)-- 环境准备和构建篇 Warning 1.deep /deep/和 ...

随机推荐

  1. Golang扫盲式学习——GO并发 | (一)

    并发与并行 并发与并行的概念和区别 并行:同一个时间段内多个任务同时在不同的CPU核心上执行.强调同一时刻多个任务之间的"同时执行". 并发:同一个时间段内多个任务都在进展.强调多 ...

  2. R画韦恩图之总结

    本文分享自微信公众号 - 生信科技爱好者(bioitee).如有侵权,请联系 support@oschina.cn 删除.本文参与"OSC源创计划",欢迎正在阅读的你也加入,一起分 ...

  3. 【技术积累】Java中的JVM【一】

    什么是JVM JVM英文全称为Java Virtual Machine,中文意为Java虚拟机.JVM是一种能够执行Java语言编写的程序的虚拟机器,它首次作为Java语言的一部分,后来又被移植到了许 ...

  4. 如何解决PyCharm中运行不了python代码的问题

    一.问题分析 一般是新手小白才会出现这个问题.刚入门python或者Web自动化测试的集美们很多都会选择使用PyCharm来运行python,但是下载安装完PyCharm后,新建了一个python项目 ...

  5. 【HarmonyOS】如何获取公共目录的图片等文件(API7 FA模型JS语言)

    ​ [关键字] API7.JS.公共目录.@ohos.multimedia.mediaLibrary [前言] 在使用API7 JS开发HarmonyOS应用时,需要获取非应用目录即内部存储公共目录下 ...

  6. C#/VB.NET:快速而简单的免费SVG到PDF转换技巧

    在日常工作中,我们常常需要将SVG转换为PDF格式.这是因为SVG格式的图像在打印时可能会出现问题,例如失去分辨率或无法正确适应纸张大小.与此相比,PDF格式则专门用于打印和共享文档,可以确保高质量输 ...

  7. midjourney国内版上线! 快来体验一下midjourney的强大功能

    最近大火的midjourney国内版上线了!该网站对接了midjourneyAPI,以文生图.以图生图功能都支持,下面我们来体验一下它的功能. 网址:https://www.weijiwangluo. ...

  8. 【TVM模型编译】2. relay算子构造.md

    从TVM的官方Tutorial里面,介绍了如何新增自定义算子.(这是我翻译的) 之前的文章讲到了onnx 算子转换到Relay IR的过程 下面以Conv2d算子介绍,编译过程中 Relay IR是如 ...

  9. Terraform 系列-使用 for-each 对本地 json 进行迭代

    系列文章 Terraform 系列文章 Grafana 系列文章 概述 前文 Grafana 系列 - Grafana Terraform Provider 基础 介绍了使用 Grafana Terr ...

  10. SRS之StateThreads学习

    最近在看SRS的源码.SRS是基于协程开发的,底层使用了StateThreads.所以为了充分的理解SRS源码,需要先学习一下StateThreads.这里对StateThreads的学习做了一些总结 ...