在vue中封装echart组件

起因:使用两种不同的图表组件时,发生了冲突问题,导致其中一个组件图表无法显示,可以将其中一个图表封装成组件。

1、在vue中安装Echart

npm install echarts -S

2、创建一个名为echart.vue的文件

随便做了一个饼图,prop中是我们自定义属性用来接受父组件传来的数据

<template>
  <div id="radar" class="container"></div>
</template>

<script>
import * as echarts from "echarts";
export default {
  name: "echart",
  props: {
    //接受父组件传递来的数据
    items: {
      type: Array,
      default() {
        //默认数据,没有数剧的情况下启用
        return [
          {
            name: "Green/\nVegetative",
            children: [
              {
                name: "Olive Oil",
                value: 1,
              },
              {
                name: "Raw",
                value: 1,
              },
              {
                name: "Green/\nVegetative",
              },
              {
                name: "Beany",
                value: 1,
              },
            ],
          },
          {
            name: "Roasted",
            children: [
              {
                name: "Pipe Tobacco",
                value: 1,
              },
              {
                name: "Tobacco",
                value: 1,
              },
              {
                name: "Burnt",
              },
              {
                name: "Cereal",
              },
            ],
          },
          {
            name: "Spices",
            children: [
              {
                name: "Pungent",
                value: 1,
              },
              {
                name: "Pepper",
                value: 1,
              },
              {
                name: "Brown Spice",
              },
            ],
          },
          {
            name: "Sweet",
            children: [
              {
                name: "Brown Sugar",
              },
              {
                name: "Vanilla",
                value: 1,
              },
              {
                name: "Vanillin",
                value: 1,
              },
              {
                name: "Overall Sweet",
                value: 1,
              },
              {
                name: "Sweet Aromatics",
                value: 2,
              },
            ],
          },
        ];
      },
    },
  },
  mounted() {
    let values = []; //提炼接收到的数据
    this.items.forEach((el) => {
      values.push(el.value);
    });
    const option = {
      //覆盖配置数据option
      series: {
        type: "sunburst",
        data: this.items,
        radius: [0, "95%"],
        sort: undefined,
        emphasis: {
          focus: "ancestor",
        },
        levels: [
          {},
          {
            r0: "15%",
            r: "35%",
            itemStyle: {
              borderWidth: 2,
            },
            label: {
              rotate: "tangential",
            },
          },
          {
            r0: "35%",
            r: "70%",
            label: {
              align: "right",
            },
          },
          {
            r0: "70%",
            r: "72%",
            label: {
              position: "outside",
              padding: 3,
              silent: false,
            },
            itemStyle: {
              borderWidth: 3,
            },
          },
        ],
      },
    };
    //初始化
    const chartObj = echarts.init(document.getElementById("radar"));
    chartObj.setOption(option);
  },
};
</script>
<style scoped>
.container {
  width: 300px;
  height: 300px;
}
</style>

3、在我们使用的位置
item中写我们自定义属性,也就是图表中的data值

<echart :items="items"></echart>
import echart from "./components/echart.vue";//引入组件文件
export default {
  name: "home",
	  components: {
	    echart,
	  },
  }

4、将echarts封装后,如果要使图表实时更新,需要在子组件对改变的数进行监听,再重新渲染图表
创建监听函数

watch: {
        items:{
          handler(val) {
                this.setChart2(val)
            },
        },
        deep: true,
        immediate: true,
      },

并在方法内调用渲染表格的方法,实现同步刷新

setChart2(e){
    this.items=e
    this.getDate();
  }
  ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值