echarts基础小组件

<template>
    <div ref="echart" :style="{
      width:width,
      height:height
    }" class="echartsbox"></div>
</template>
<script>

    import * as echarts from 'echarts'
    export default {
        props: {
            options: {
                type: Object,
                default: {}
            },
            width:{
               type: String || Number,
              default:'100%'
            },
            height:{
               type: String || Number,
               default:'250px'
            },
        },
        watch: {
            options: {
                handler(newVal, oldVal) {
                    console.log(newVal, 'newVal')
                    if (this.echart) {
                        this.echart.setOption(newVal)
                    } else {
                        this.initChart()
                    }
                },
                deep: true,
            },
        },
        beforeDestroy () {
          this.echart.dispose()
          this.echart = null
        },
        data() {
            return {
                echart: null   //判断当前页面中是否有echart图表
            }
        },
        methods: {
            initChart() {          //生成图表
                if (this.echart) {       //如果图表已经存在,只需要更新配置信息
                    this.echart.setOption(this.options)
                } else {             //如果不存在,则生成图表并配置信息
                    this.echart = echarts.init(this.$refs.echart)
                    this.echart.setOption(this.options)
                }
                let that = this;
                window.addEventListener('resize', () => {
                    that.echart.resize();
                }, false);

                this.echart.on('click', function(params) {
                    that.$emit('echartClick',params)
                });


            },

        },
        mounted() {
            this.initChart();
        },
        computed: {

        }
    }
</script>

<style lang="scss" scoped>
.echartsbox{
  width: 100%;
  height: 100%;
}
</style>

 

 

<EchartsBox :options="oneopt" height="250px"> </EchartsBox>

  

posted @ 2023-02-22 14:09  南瓜壳  阅读(21)  评论(0编辑  收藏  举报