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

今天在码代码的时候遇到了一个需求,这个要求在tooltip的时候展示比较复杂的东西,如下图:

这是已经做好的效果,原来最开始的想法是用最笨的办法,直接拿字符串去拼html代码,类似于下面这个样子:

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

,但使用这种方法去实现上面的需求显然太笨拙了,这需要在tooltip里面写很长一串html代码,这显然是不符合代码要求的,所以后来做了一下优化,把这部分代码单独提出来做成了一个组件,在每次鼠标tooltip时去挂载这个组件,代码如下:

//父组件里面
//引入路由对象,这个按照自己项目的具体情况去引入,我这个项目使用的router就是来自于公司统一封装的
import { router} from "@epnc-t/common-vue"
//引入自定义组件
import MapTooltip from "./MapTooltip.vue"
//并按照vue的语法去注册这个组件
components: { MapTooltip }
//在echarts的tooltip内,这样改写
 tooltip: {
              show: true,
              trigger: "item",
              borderWidth: 0,
              formatter: (params) => {
                  //自己需要什么数据就去构建就好了,这里我直接省略了我的数据构建部分
                  let data = params.data
                  let obj = {
                    distName: data.distName,
                    arr: [
                      {
                        label: data.cuStateName,
                        number: data.loadRate,
                        title: "负载率"
                      },
                      {
                        label: data.phStateName,
                        number: data.linkRelativeRatio,
                        title: `三相不平衡度`
                      }
                    ]
                  }

                  const div = document.createElement("div")
                  let mapTooltip = new Vue({
                    router, //这个router就是你自己项目使用的router,也就是上面引入的router
                    render: (h) =>
                      h(MapTooltip, { //这个组件就是你上面引入的自定义的组件
                        props: { params: obj } //这个obj就是你自己构建的数据
                      })
                  })
                  mapTooltip.$mount(div)
                  return mapTooltip.$el
                }
                return
              }
            },
//子组件内,这个就是vue的组件的常规使用方法

<template>
  <div class="tooltip-all">
    <!-- 此处的逻辑按照自己的需求去写就是 -->
    </div>
  </div>
</template>

<script>
//以下的js逻辑按照自己的需求去写即可
export default {
  props: ["params"],//这里就是接收的父组件传过来的数据
  data() {
    return {}
  }
}
</script>

<style scoped lang="scss">

</style>

以上就是优化的结果,小伙伴有其他想法欢迎一起讨论

Vue 自定义 Echartstooltip 需要做以下几个步骤: 1. 安装 Echarts:在终端运行以下命令安装 Echarts: ```bash npm install echarts --save ``` 2. 在需要使用 Echarts组件导入 Echarts: ```javascript import echarts from 'echarts' ``` 3. 创建一个 div 元素用于绘制图表: ```html <template> <div id="chart"></div> </template> ``` 4. 在组件的 `mounted` 钩子函数初始化 Echarts 并绘制图表: ```javascript export default { mounted() { this.drawChart() }, methods: { drawChart() { // 获取图表容器元素 const chartContainer = document.getElementById('chart') // 初始化 Echarts 实例 const chart = echarts.init(chartContainer) // 定义图表数据 const data = [...] // 定义自定义 tooltip 的格式化函数 const customTooltipFormatter = params => { const dataIndex = params[0].dataIndex const value = data[dataIndex] return `Value: ${value}` } // 配置图表选项 const options = { tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' }, formatter: customTooltipFormatter }, series: [{ type: 'bar', data: data }] } // 绘制图表 chart.setOption(options) } } } ``` 在上面的代码,我们通过配置 `tooltip` 属性来实现自定义的 tooltip 样式。其,`formatter` 属性用于定义自定义的 tooltip 内容格式化函数。 需要注意的是,以上只是一个简单的示例,实际上你可以根据自己的需求进一步定制 tooltip 的样式和内容。 希望能帮到你!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值