vue3中使用echarts的子组件接收父级传来参数,并重新渲染 +++watch监听的用法

2023-10-29

1、父组件页面:

<template>
<div class="heightChart">
 <height-chart :myEchart="equipmentReal.echartsData[0]" />
  <div>高度(m)</div>
</div>
</template>
<script setup>
import heightChart from "./echarts/heightChart.vue"

const props = defineProps({
  equipmentReal: {
    type: Object,
    default: function () {
      return {};
    },
  },
  echartsData: {
    type: Array,
    default: function () {
      return [];
    },
  }
});
console.log("echartsData-1",props.equipmentReal.echartsData);
</script>

2、echarts的子组件:

<template>
<!-- {{myEchart}} -->
  <div id="main" ref="chartBox"></div>
</template>
<script setup>
import { parseInt } from "lodash-es";
//接受父级传来的值
const props = defineProps({
  myEchart: {
    type: Object,
    default: function () {
      return {};
    },
  }
});
//监听父级传来的值并赋值
let echartVal = ref(0)
watch(
  () => props.myEchart,
  (newVal) => {
    if (newVal) {
      console.log("echartsData-2",newVal.value);
      if(newVal.value != undefined){
        let echartValue = parseInt(newVal.value)
        // console.log("echartsData-3",typeof(echartValue));
        echartVal.value = echartValue
      }
      onMounted(() => {
        console.log("echartsData-3",echartVal.value);
        const category = [
          {
            name: "高度",
            // value: 612.5,
            // TODO 改为动态获取数据
            value:echartVal.value
          },
        ]; // 类别
        init();
      });
    }
  },
  { immediate: true, deep: true }
);




let echarts = inject("echarts"); // 主要

onBeforeUnmount(() => {
  chartBox.value = null;
  machart.value = null;
  clearInterval(timer.value);
  timer.value = null;
});
// 基本柱形图
const chartBox = ref(null);
const machart = ref(null);
const timer = ref(null);

const category = [
  {
    name: "高度",
    // value: 612.5,
    // TODO 改为动态获取数据
    value:echartVal.value
  },
]; // 类别
const total = 2500; // 数据总数

function init() {
  machart.value = echarts.init(document.getElementById("main")); // 主要
  const option = {
    // backgroundColor: "#071347",
    grid: {
      top: 10,
      bottom: 5,
    },
    xAxis: [
      {
        type: "category",
        inverse: false,
        data: category,
        axisLine: {
          show: false,
        },
        axisTick: {
          show: false,
        },
        axisLabel: {
          show: false,
        },
      },
    ],

    yAxis: [
      {
        max: total,
        splitLine: {
          show: false,
        },
        axisLine: {
          show: false,
        },
        axisLabel: {
          show: false,
        },
        axisTick: {
          show: false,
        },
      },
    ],
    series: [
      {
        // 内
        type: "bar",
        barWidth: 127.5,
        silent: true,
        itemStyle: {
          normal: {
            color: "rgba(17, 202, 165, 0.6)",
          },
        },
        label: {
          normal: {
            formatter: function (params) {},
            textStyle: {
              color: "#fff",
              fontSize: 14,
            },
            position: "top",
            // distance: 20, // 向右偏移位置
            show: true,
          },
        },
        data: category,
        z: 3,
        // animationEasing: "elasticOut",
      },

      {
        // 分隔
        type: "pictorialBar",
        itemStyle: {
          normal: {
            color: "rgba(19, 67, 106, 0.8)",
            // 00BF99
            opacity: 0.5,
          },
        },
        symbolRepeat: "fixed",
        //   symbolMargin: 2,
        symbol: "rect",
        symbolClip: true,
        symbolSize: [130, 8],
        symbolPosition: "start",
        symbolOffset: [-5, -4],
        symbolBoundingData: total,
        data: [total - 30],
        z: 2,
        animationEasing: "elasticOut",
      },

      {
        name: "外框",
        type: "bar",
        barGap: "-101.5%",
        data: [total],
        barWidth: 130, // 设置外框粗细
        itemStyle: {
          normal: {
            barBorderRadius: [5, 5, 5, 5],
            color: "rgba(19, 67, 106, 0.5)", // 填充色
            barBorderColor: "#11CAA5", // 边框色
            barBorderWidth: 1, // 边框宽度
            shadowColor: "#00BF99",
            shadowBlur: 15,
            shadowOffsetX: 1,
            shadowOffsetY: 1,
          },
        },
        z: 0,
      },
    ],
  };
  // 定时改变echarts的值
  timer.value = setInterval(function () {
    let num = Math.ceil(Math.random() * (1700 - 600) + 600);
    // option.xAxis[0].data = [num]
    option.series[0].data = [
      {
        name: "高度",
        // value: num,
        // TODO 改为动态获取数据
        value:echartVal.value
      },
    ];
    machart.value.setOption(option, true);
  }, 3000);
  machart.value.setOption(option, true);
  window.addEventListener("resize", function () {
    machart.value.resize();
  });
}
</script>
<style lang="scss" scoped>
#main {
  width: 100%;
  height: 100%;
  // transform:skew(-5deg,0deg) rotate(-2deg)
}
</style>

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

vue3中使用echarts的子组件接收父级传来参数,并重新渲染 +++watch监听的用法 的相关文章

随机推荐

  • 用JavaScript去找出一个数组里的所有素数(质数)

    var x 定义一个变量x r arr 定义一个空数组 for x 1 x lt 100 x arr push x 把1 100依次放到数组arr中 function get primes arr return arr filter fun
  • oracle获取rowid,Oracle中的ROWID实现

    一直以来 Oracle的发展是如火如荼 依然非常成熟 无论是行业的人员和资料的丰富程度 对于数据库的体系结构的内容 下面这张图我估计很多DBA都快看吐了 每次一提起体系结构 总是会看到这张图 而看着10年前的图 发现依旧能讲出不少的东西 很
  • Eclipse导入新的项目并成功运行

    1 检查 setting 下的一个文件 检查里边的配置和自己的是否一致 2 右键file选择import导入 2 1 选择如图 next 2 2 继续 finish 3 右键项目选择 buildpath gt configure build
  • MySQL8.0.32的安装与配置(最详细)

    目录 一 下载 打开 MySQL官网 点击打开 依次按照 P1 P4 进行下载 二 下载解压 配置初始化文件mysql ini 新建data文件夹 解压之后 解压后把文件放在C盘以外的盘 的文件里边是没有data文件的 需要 创建一个空文件
  • 【机器学习】用可视化的方式直观理解Bayesian models

    如果你感觉Bayesian models反直觉 不好理解 本期分享两个工具 利用可视化的直观方式探索贝叶斯模型 1 Python ArviZ 主要包含以下4方面功能 后验分析 posterior analysis 数据存储 data sto
  • 几款免费PDF合并成一个PDF的软件推荐,快收藏起来吧

    工作中 我们经常需要接收文件 而由于PDF文件具有较高的稳定性 所以它也成为人们发送文件的热门选择 而当需要发的PDF文件比较多时 一个个发送对方接收起来不方便也容易混乱 这时 我们将多个PDF文件合并成一个PDF文件就高效很多了 那么 P
  • umi Mock数据

    1 在mock文件夹下创建文件 export default GET api users users 1 2 api users 1 id 1 GET可忽略 POST api users create req res gt 和express
  • 如何确保网站的安全性

    大部分企业通过网站平台来进行信息发布 交流及宣传 推广企业业务 用户可以通过网站对企业进行初步的了解 并进一步获取咨询服务 企业网站不光是一个展示企业形象的平台 更是一种有效的营销方式 当然其安全性也是至关重要 随着网站的普遍应用 企业网站
  • 基于 STM32CubeMX 添加 RT-Thread 操作系统组件(四)- 多线程SRAM动态内存

    概述 本篇主要介绍这么使用STM32CubeMx工具添加RT Thread操作系统组件 码代码的IDE是keil 介绍单线程SRAM静态内存使用 如果还不知道 这么使用STM32CubeMx工具添加RT Thread操作系统组件 请移步到
  • PageRank算法 -- 从原理到实现

    本文整理自博文PageRank算法 从原理到实现 1 算法来源 这个要从搜索引擎的发展讲起 最早的搜索引擎采用的是 分类目录1的方法 即通过人工进行网页分类并整理出高质量的网站 那时 Yahoo 和国内的 hao123 就是使用的这种方法
  • Android学习笔记(五)--(可调节)模糊效果

    很多时候点开一个button的时候或者弹出某个提示的时候 背景都会变成模糊的或者说是虚化的 而今天 我们就来实现一下动态模糊效果 可以通过控制条或者手势来操控模糊程度 之前自己也做了一个 但是发现会有卡顿 在论坛逛了一会儿就发现果然有一个巧
  • 我的2020工作与学习总结

    我的2020总结 今天是2020年12月30日 马上就要开始新的一年了 在出差途中简单做个总结 总结我2020这平凡而又充实的一年 学习和生活方面 回忆起我去年做的总结我的2019 这两年都是收获满满 我19年大学毕业 其实目前我已经工作两
  • app客户端与服务器数据交互时—数据加密

    总结 1 对称加密加密与解密使用的是同样的密钥 所以速度快 但由于需要将密钥在网络传输 所以安全性不高 2 非对称加密使用了一对密钥 公钥与私钥 所以安全性高 但加密与解密速度慢 3 解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密
  • vue json对象转数组_vue-vue-router 快速了解,多看看能扎实基础

    看着这么多房子头都晕了 不知道从哪里回家 概述 vue router是Vue js官方的路由插件 它和vue js是深度集成的 适合用于构建单页面应用 vue的单页面应用是基于路由和组件的 路由用于设定访问路径 并将路径和组件映射起来 传统
  • 03模板学习之函数模板案例-写一个int,char通用的冒泡

    03模板学习之函数模板案例 写一个int char通用的冒泡 1 直接看代码 模板测试 cpp 此文件包含 main 函数 程序执行将在此处开始并结束 include
  • windows terminal使用git bash

    1 在微软应用商店下载 windows terminal 1 打开 Windows Terminnal 的设置界面 点击添加新配置文件添加配置如下 即在json配置文件中添加 commandline D Git bin bash exe l
  • ChatGPT的前世今生

    作者 符尧等 编辑 夕小瑶的卖萌屋 点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 全栈算法 技术交流群 正文 最近 OpenAI的预训练模型ChatGPT给人工智能领域的研究人员留下了深刻的印
  • java中需要注意的一些代码编写规范

    一 编程规约 1 命名风格 常量命名全部大写 单词间用下划线隔开 力求语义表达完整清楚 不要嫌名字长 POJO 类中的任何布尔类型的变量 都不要加 is 前缀 否则部分框架解析会引起序列化错误 杜绝完全不规范的缩写 避免望文不知义 在常量与
  • 13.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

    题目的数据来源于50道SQL练习题及参考答案 原创 Hill GM的博客 CSDN博客 sql编程题目 建表和链接里面的是一样的 解决的思路 首先将每个学生的各科成绩放在同一行显示 select st sc1 score 语文 sc2 sc
  • vue3中使用echarts的子组件接收父级传来参数,并重新渲染 +++watch监听的用法

    1 父组件页面