echarts饼图下钻(点击饼图区域下钻且不能返回版本)

720 阅读1分钟

在写eacharts项目当中,会遇到一种叫下钻的功能,举个例子,像饼图的话,假如像这样的:

chart.png

首先看到这张饼图,有包子、鞋子、衣服、书籍、手机五种品类,那么我现在点击对应的饼图部分。 比如说,点击手机,结果如下图所示:

chart1png.png

没错,他就到了手机品类下面的具体分类,小米、苹果、华为这些子级品类。所以下钻其实可以理解为总览页面点击详情进入到详情页。可能细心的小伙伴发现了,其实我就是把官网的例子稍微改了下,所以代码整体结构还是比较清晰易懂的。

那么具体的代码实现如下:

<template>
    <div class="ring" id="ring"></div>
</template>

<script>
import * as echarts from 'echarts';
export default {
  mounted() {
    this.$nextTick(()=>{
      this.initRing()
    })
  },

  data() {
    return {
      ringChart: null,
      ringArr: [
        { 
          value: 1048, 
          name: '包子',
          child: [
            {
              value: 1000,name: '莲蓉包'
            },
            {
              value: 48, name: '叉烧包'
            }
          ] 
        },
        { 
          value: 735, 
          name: '鞋子',
          child: [
            {
              value: 500, name: '运动鞋'
            },
            {
              value: 200, name: '帆布鞋'
            },
            {
              value: 35, name: '老爹鞋'
            }
          ] 
        },
        { 
          value: 580, 
          name: '衣服',
          child:[
            {
              value: 100, name: '卫衣'
            },
            {
              value: 200, name: '百褶裙'
            },
            {
              value: 50, name: '衬衫'
            },
            {
              value: 200, name: '洛丽塔'
            },
            {
              value: 30, name: '牛仔裤'
            }
          ] 
        },
        { 
          value: 484, 
          name: '书籍',
          child: [
            {
              value: 400,
              name: '古诗词'
            },
            {
              value: 84,
              name: '英语作文'
            }
          ]
        },
        { 
          value: 300,
          name: '手机',
          child: [
            {
              value: 100,
              name: '小米'
            },
            {
              value: 50,
              name: '苹果'
            },
            {
              value: 150,
              name: '华为'
            }
          ]
        }
      ]
    }
  },
  methods: {
    initRing () {
      this.ringChart = echarts.init(document.querySelector('#ring'))
      let option =  {
        tooltip: {
          trigger: 'item'
        },
        legend: {
          bottom: '5%',
          left: 'center'
        },
        series: [
          {
            // name: 'Access From',
            type: 'pie',
            radius: ['40%', '70%'],
            avoidLabelOverlap: false,
            itemStyle: {
              borderRadius: 10,
              borderColor: '#fff',
              borderWidth: 2
            },
            label: {
              show: false,
              position: 'center'
            },
            emphasis: {
              label: {
                show: true,
                // fontSize: '40',
                fontWeight: 'bold'
              }
            },
            labelLine: {
              show: false
            },
            data: this.ringArr
          }
        ]
      }
      this.ringChart.setOption(option)
      let that = this
      this.ringChart.on('click',function (params) {
        let childOption = {
          series:[{
            data: params.data.child
          }]
        }
        that.ringChart.setOption(childOption)
      })
    }
  }
}
</script>

<style>
.ring {
  width: 800px;
  height: 800px;
}

</style>

点击饼图部分的时候,使用cick点击事件,拿到params参数,该参数的data属性就是点击部分的值,然后拿到data下面的child数组,也就是子级数据,给饼图重新赋值进去setOption就可以了。非常简单。不过这个版本没有告诉你怎么返回,以及如果有多层嵌套的情况下怎么样有的下钻一层有的下转两层。下一篇文章再来告诉你……

希望对你有所帮助,以上