vue针对第三方组件Echarts在Modal显示的写法

1.提取Echarts元素

xxxEcharts.vue

<template>
    <div>
        <div ref="devchar"></div>
    </div>
</template>

<script>
    export default {
        components: {
        },
        data() {
            return {
                devchar:null,
                option: null,
                time: [],
                data:[],
            }
        },
        methods: {
            clear(){
                if(null!=this.option.xAxis)
                    this.option.xAxis.data = [];
                if(null!=this.option.series){
                    this.option.series[0].data = [];
                    this.option.series[0].markPoint.data = [];
                    this.option.series[1].data = [];
                }
                this.time = [];
                this.data = [];this.devchar=null;
            },
            setData(time,data){
                this.time=time;
                this.data=data;this.setOption();
            },
            setOption(){
                if(null==this.option)
                    return;
                this.option.xAxis.data = this.time;
                this.option.series[0].data = this.data;this.devchar.setOption(this.option,true);
                let that = this;
                window.addEventListener('resize', function() {
                    that.termsinalchar.resize();
                });
            },
            init(){
                this.devchar = echarts.init(this.$refs.devchar);
                this.option = {
                    color: ['#975fe4'],
                    tooltip: {
                        trigger: 'axis',
                        axisPointer: {
                            type: 'cross'
                        }
                    },
                    dataZoom: [{
                        type: 'slider',
                        show: true,
                        realtime: true,
                        height:20,
                        start: 0,
                        end: 100
                    }],
                    grid: {
                        left: '2%',
                        right: '2%',
                        bottom: '18%',
                        containLabel: true
                    },
                    legend: {
                        show:false,
                        left:'center',
                        data: ['线路1']
                    },
                    xAxis: {
                        name: '',
                        type: 'category',
                        boundaryGap: false,
                        data: this.time
                    },
                    yAxis: {
                        type: 'value',
                        splitLine: {
                            lineStyle: {
                                type: 'dashed',
                                color:'#32316E',
                                width: '1'
                            }
                        }
                    },
                    series: [
                        {
                            name: '线路1',
                            type: 'line',
                            smooth: true, //平滑
                            data: this.data,
                            symbol: 'circle',
                            itemStyle: {
                                normal: {
                                    color: '#975fe4', // 折线条的颜色
                                    borderColor: '#975fe4', // 拐点边框颜色
                                }
                            },
                            markPoint: {
                                data: []
                            }
                        }
                    ]
                };
            },
        },
        created() {},
        mounted() {
            this.init();
        }
        
    }
</script>

<style>
</style>

2. Modal

<style lang="less">
</style>
<template>
    <Modal draggable v-model="devModal" width="950px" :title="modalTitle" @on-ok="okEvent(modalTitle)" footer-hide>
        <Row>
            <Col span="24">
                <xxxEcharts v-if="devEchart" ref="xxxEcharts"></xxxEcharts>
            </Col>
        </Row>
        <!--<div slot="footer">
            <Button type="text" size="large" @click="devModal=false">取消</Button>
        </div>-->
    </Modal>
</template>
<script>
export default {
  import xxxEcharts from './xxxEcharts.vue';
  components: {
    xxxEcharts
  },
  data() {
    return {
      devModal: false,
      devEchart:true,
      modalTitle: '线路',
      option:null,
      timer:null,
      data:[],
      time: []
     }
  },
  methods: {
    showView() {
      this.devModal=true;
      this.loadData();
    }
    loadData(){
      this.time=[{time:12345678},{time:12345778}]
      this.data=[10,20,30];
      this.refreshEcharts();     },     refreshEcharts(){       let that
=this;       this.signalEchart=false;       this.$nextTick(function() {         that.signalEchart=true;       });       if(this.timer!=null){         window.clearTimeout(this.timer);       }       this.timer = setTimeout(function() {         that.$nextTick(function() {           that.$refs.xxxEcharts.clear();           that.$refs.xxxEcharts.init();           that.$refs.xxxEcharts.setData(this.time,this.data);         });       },500);     },   },   mounted() {   } }

 

posted @ 2021-12-13 17:41  回溯者  阅读(287)  评论(0编辑  收藏  举报