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() { } }