echarts-tooltip自定义内容使用vue数据渲染

本文介绍了如何使用Echarts在饼图点击时弹出分页表格的详细步骤。通过在页面上创建DOM元素,设置Echarts的tooltip formatter返回HTML字符串,结合点击事件动态显示表格数据,实现了图表与表格的交互。同时,表格数据支持分页,提升了用户体验。
摘要由CSDN通过智能技术生成

目的:echarts饼图扇型点击出现提示框显示table可分页

实现:echarts-tooltip的formatter支持返回HTML字符串或者创建的DOM实例。可以页面创建个DOM,在formatter函数获取并return,但是页面会渲染这个DOM,所以一开始就v-show=false不显示,在echarts点击事件里出发显示

1.在页面创建DOM

<div v-show="isShow" ref="pieTable" class="tooltip">
      <el-table
        :data="pieTable"
        stripe
        height="calc(100% - 50px)"
      >
        <el-table-column
          prop="account"
          align="center"
          label="账户"
        />
        <el-table-column
          prop="name"
          align="center"
          label="账户名"
        />
        <el-table-column
          prop="money"
          align="center"
          label="合计金额"
        />
        <el-table-column
          prop="relationship"
          align="center"
          label="关系"
        />
      </el-table>
      <el-pagination
        :current-page="listQuery3.pageNum"
        :page-size="listQuery3.pageSize"
        layout="total, prev, pager, next, jumper"
        :total="total3"
        @size-change="handleSizeChange3"
        @current-change="handleCurrentChange3"
      />
    </div>

2.绘制饼图方法里配置tooltip,并监听点击事件

pieChart() {
      const chartDom = document.getElementById('pie')
      // chartDom.style.width = this.width + 'px'
      this.myChart = this.$echarts.init(chartDom)
      const arr = [
        { name: '温州', value: 6, arr: [{ name: 'a', money: 100, account: '1111', relationship: '亲属' }, { name: 'b', money: 100, account: '1111', relationship: '亲属' }, { name: 'c', money: 100, account: '1111', relationship: '亲属' }, { name: 'd', money: 100, account: '1111', relationship: '亲属' }, { name: 'd', money: 100, account: '1111', relationship: '亲属' }, { name: 'd', money: 100, account: '1111', relationship: '亲属' }] },
        { name: '杭州', value: 8, arr: [{ name: 'a', money: 100, account: '1111', relationship: '亲属' }, { name: 'b', money: 100, account: '1111', relationship: '亲属' }, { name: 'c', money: 100, account: '1111', relationship: '亲属' }, { name: 'd', money: 100, account: '1111', relationship: '亲属' }, { name: 'd', money: 100, account: '1111', relationship: '亲属' }, { name: 'd', money: 100, account: '1111', relationship: '亲属' }] },
        { name: '衢州', value: 4, arr: [{ name: 'a', money: 100, account: '1111', relationship: '亲属' }, { name: 'b', money: 100, account: '1111', relationship: '亲属' }, { name: 'c', money: 100, account: '1111', relationship: '亲属' }, { name: 'd', money: 100, account: '1111', relationship: '亲属' }, { name: 'd', money: 100, account: '1111', relationship: '亲属' }, { name: 'd', money: 100, account: '1111', relationship: '亲属' }] },
        { name: '湖州', value: 10, arr: [{ name: 'a', money: 100, account: '1111', relationship: '亲属' }, { name: 'b', money: 100, account: '1111', relationship: '亲属' }, { name: 'c', money: 100, account: '1111', relationship: '亲属' }, { name: 'd', money: 100, account: '1111', relationship: '亲属' }, { name: 'd', money: 100, account: '1111', relationship: '亲属' }, { name: 'd', money: 100, account: '1111', relationship: '亲属' }] }
      ]
      const option = {
        tooltip: {
          triggerOn: 'click',
          enterable: true, //鼠标可以移入提示框
          confine: true, //提示框不超出可视区域显示
          formatter: (params) => {
            const DomHtml = this.$refs.pieTable
            return DomHtml
          }
        },
        series: [
          {
            type: 'pie',
            radius: [0, '80%'],
            center: ['50%', '50%'],
            showEmptyCircle: false,
            selectedMode: 'single',
            roseType: true,
            data: arr,
            label: {
              show: true,
              color: '#fff',
              fontSize: 15,
              fontWeight: 600,
              formatter: '{b}:{c}',
              position: 'inside'
            }
          }
        ]
      }
      this.myChart.off('click')
      this.myChart.on('click', (params) => {
        this.isShow = true
        this.getPieTable()
        this.pieTable = params.data.arr
      })
      option && this.myChart.setOption(option)
    }

3.效果图

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值