当前位置: 首页 > news >正文

在echarts的tooltip组件中使用vue3自定义组件

前端很大一部工作就是还原UI,虽然现在Vue3 响应式框架很厉害了,但是依然有不少小伙伴手搓html代码,就像下面这段,费时费力。在echarts的tooltip组件中使用vue3自定义组件,可以增加不少摸鱼时间。

tooltip: {
  show: true,
  trigger: "item",
  borderWidth: 0,
  formatter: (params) => {
    return `<div class="top">
          </div>`
},

优化方法一

使用vue3 的render方法。

const containter = document.createElement("div")
// Tooltip 是一个组件
// data 是props属性
render(createVNode(Tooltip, data ), containter)

用在echarts当中如下:

tooltip: {
  show: true,
  trigger: "item",
  borderWidth: 0,
  formatter: (params) => {
    const containter = document.createElement("div")
    // 子组件直接接收params动态渲染。
	render(createVNode(Tooltip, params), containter)
    return containter
   }
},

优化方法二

使用我的开源库,在一个组件内完成这个操作(不过仅支持typescript项目,如果您使用JavaScript,就无缘了)

  1. npm i @howuse/freedom-dialog
  2. 导入函数
import { createFreedomDialog } from "@howuse/freedom-dialog"
  1. 创建方法

这里的define是一个vue组件,可以在组件内定义模板组件,不会渲染在页面上。renderContainer,返回一个html,便于使用。

 const [define, renderContainer] = createFreedomDialog()
  1. 使用

这里数据的获取从默认插槽中获得即可,具体数据是从renderContainer传入,参看下面完整代码。

 <define>
        <template #default="data">
            <div class=" custom-tooltip">
                😄
                <div>
                    <span v-html="data.marker"></span>{{ data.value }}
                </div>
            </div>
        </template>
    </define>

5.完整代码

<template>
    <define>
        <template #default="data">
            <div class=" custom-tooltip">
                😄
                <div>
                    <span v-html="data.marker"></span>{{ data.value }}
                </div>
            </div>
        </template>
    </define>
    <div style="width: 100%;height: 350px;">
        <how-bar-chart :option="option" />
    </div>
</template>
<script setup lang="ts">
    import { createFreedomDialog } from "@howuse/freedom-dialog"
    import { HowBarChart } from "@howuse/echarts"
    import type { EChartsOption } from "echarts"
    import { computed } from "vue"

    const [define, renderContainer] = createFreedomDialog()

    const option = computed<EChartsOption>(() => {
        return {
            tooltip: {
                className: 'echarts-tooltip echarts-tooltip-dark',
                formatter(data) {
                    return renderContainer(data)
                }
            },
            xAxis: {
                type: 'category',
                data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
            },
            yAxis: {
                type: 'value'
            },
            series: [
                {
                    data: [150, 230, 224, 218, 135, 147, 260],
                    type: 'bar'
                }
            ]
        }
    })
</script>
<style scoped>
    :global(.echarts-tooltip) {
        border: none !important;
        padding: 5px;
        border-radius: 5px;
        box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
    }

    :global(.echarts-tooltip-dark) {
        background-color: #333 !important;
        color: #fff;
    }
</style>

组件还有其它的特别用法,具体可以参考网站https://howuse.yigechengzi.com/freedom-dialog/

相关文章:

  • Spring Bean生命周期通俗讲解
  • VScode C语言学习开发环境;运行提示“#Include错误,无法打开源文件stdio.h”
  • php文件包含
  • C extern在函数声明中的作用
  • 各类数据质量等相关学习地址
  • vmware centos 10 stream boot 安装
  • 【算法】快排-786. 第k个数
  • 23. AI-大语言模型-DeepSeek
  • MySQL登录问题总结
  • 【Reasoning】LLaMA-Berry: Pairwise Optimization for O1-like Olympiad-Level Mathematical Reasoning
  • Linux 内核中的 container_of 宏:以 ipoib_rx_poll_rss 函数为例
  • Langchain vs. LlamaIndex:哪个在集成MongoDB并分析资产负债表时效果更好?
  • android,flutter 混合开发,pigeon通信,传参
  • RDMA ibverbs_API功能说明
  • 【蓝桥杯集训·每日一题2025】 AcWing 6122. 农夫约翰的奶酪块 python
  • Rust编程语言入门教程(五)猜数游戏:生成、比较神秘数字并进行多次猜测
  • javaSE学习笔记22-线程(thread)-线程通信、线程池
  • MySQL(1)基础篇
  • 【数据集】 jsonl格式
  • Rust编程语言入门教程 (六)变量与可变性
  • 党政机关停车场免费、食堂开放,多地“五一”游客服务暖心周到
  • 马上评|启动最高层级医政调查,维护医学一方净土
  • 马上评|科学谋划“十五五”,坚定不移办好自己的事
  • 经营业绩持续稳中向好,国铁集团2024年度和2025年一季度财务决算公布
  • “上博号”彩绘大飞机今日启航:万米高空传播中国古代文化
  • 国家能源局通报上月投诉情况:赤峰有群众反映电费异常增高,已退费