Vue中⽗组件向⼦组件echarts传值问题
原⽂链接:blog.csdn/Uookic/article/details/80638883?utm_source=copy
问题:当⽗组件传值给⼦组件echarts时,发现⼦组件获取的props为空,刚开始以为是钩⼦函数放错了地⽅,后来发现从mounted和created 都不⾏。当在⽗组件data定义传递的数据的时候⼦组件显⽰正常
原因:后来经过排查,此处省略N字,发现echarts是在渲染的时候就传递数据
解决⽅案:在⽗组件定义⼀个flag,当数据获得的之后再进⾏⼦组件的渲染
1 /⽗组件
2    <div class="chart-wrapper">
3    <pie-chart v-if="flag" :pie-data="piedata"></pie-chart>
4  </div>
5  ...
6  import {getPie} from '@/api/status'
7  export default {
8  name: 'device',
9  data() {
10return {
11      flag:false,
12      piedata:{},
13      ...
14  },
15  created(){
16this.init()
17  },
18  methods:{
19    init(){
20        getPie().InfoSucc)
21    },
22    getInfoSucc(res){
23      res = res.data;
de ==0){
25          const values = res.values;
26this.piedata = values.piedata;
27this.flag = true
28        }
29      }
1//⼦组件
2 <template>
3  <div :class="className" :></div>
4 </template>
5
6 <script>
7 import echarts from 'echarts'
8 require('echarts/theme/macarons') // echarts theme
9 import { debounce } from '@/utils'
10
11 export default {
12  props: {
13    pieData: {
14      type: Object
15    },
16    msg: {
17      type:Number
18    },
19    className: {
20      type: String,
21default: 'chart'
22    },
23    width: {
24      type: String,
25default: '100%'
26    },
27    height: {
28      type: String,
29default: '300px'
30    }
31  },
32  data() {
33return {
34      chart: null
35    }
36  },
37// watch: {
38//  piedata: {
39//    deep: true,
40//    handler(val) {
41//      console.log(val)
42//      this.setOptions(val)
43//    }
44//  }
45// },
46  mounted() {
47    console.log("pieData:"+JSON.stringify(this.pieData))
48this.initChart()
49this.__resizeHanlder = debounce(() => {
50if (this.chart) {
size()
52      }
53    }, 100)
54    window.addEventListener('resize', this.__resizeHanlder)
55  },
56  beforeDestroy() {
57if (!this.chart) {
58return
59    }
60    veEventListener('resize', this.__resizeHanlder) 61this.chart.dispose()
62this.chart = null
63  },
64  methods: {
65    setOptions({ text, arrtype, arrdata } = {}) {
66this.chart.setOption({
67        title: {
68          text: text
69        },
70        tooltip: {
71          trigger: 'item',
72          formatter: '{a} <br/>{b} : {c} ({d}%)'
73        },
74        legend: {
75          left: 'center',
76          bottom: '10',
77          data: arrtype
78        },
79        calculable: true,setoption
80        series: [
81          {
82            name: '',
83            type: 'pie',
84            roseType: 'radius',
85            radius: [15, 95],
86            center: ['50%', '42%'],
87            data: arrdata,
88            animationEasing: 'cubicInOut',
89            animationDuration: 2600
90          }
91        ]
92      })
93    },
94    initChart() {
95this.chart = echarts.init(this.$el, 'macarons')
96this.setOptions(this.pieData);
97    }
98  }
99 }
100 </script>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。