echarts의 함정 문제 기록
문제: 상위 컴포넌트가 하위 컴포넌트 echarts에 값을 전달할 때 하위 컴포넌트에서 얻은 props가 비어 있는 것으로 나타났습니다. 후크 기능이 잘못 배치되었지만 나중에 마운트되거나 생성되지 않은 기능이 작동하지 않는다는 것을 발견했습니다. 전달된 데이터를 상위 컴포넌트 데이터에 정의하면 하위 컴포넌트가 정상적으로 표시됩니다
원인: 나중에 조사한 결과 여기서 N 단어가 생략되었으며, echarts가 렌더링 중에 데이터를 전송하는 것으로 나타났습니다
해결책: 플래그를 정의합니다. 상위 컴포넌트에서 데이터를 얻으면 하위 컴포넌트가 렌더링됩니다
//父组件 <p class="chart-wrapper"> <pie-chart v-if="flag" :pie-data="piedata"></pie-chart> </p> ... export default { name: 'device', data() { return { flag:false, piedata:{}, ... }, created(){ this.init() }, methods:{ init(){ axios.get('/static/mock/status/pie.json').then(this.getInfoSucc) }, getInfoSucc(res){ res = res.data; if(res.code ==0){ const values = res.values; this.piedata = values.piedata; this.flag = true } }
//子组件<template> <p :class="className" :style="{height:height,width:width}"></p></template><script>import echarts from 'echarts'require('echarts/theme/macarons') // echarts themeimport { debounce } from '@/utils'export default { props: { pieData: { type: Object }, msg: { type:Number }, className: { type: String, default: 'chart' }, width: { type: String, default: '100%' }, height: { type: String, default: '300px' } }, data() { return { chart: null } }, // watch: { // piedata: { // deep: true, // handler(val) { // console.log(val) // this.setOptions(val) // } // } // }, mounted() { console.log("pieData:"+JSON.stringify(this.pieData)) this.initChart() this.__resizeHanlder = debounce(() => { if (this.chart) { this.chart.resize() } }, 100) window.addEventListener('resize', this.__resizeHanlder) }, beforeDestroy() { if (!this.chart) { return } window.removeEventListener('resize', this.__resizeHanlder) this.chart.dispose() this.chart = null }, methods: { setOptions({ text, arrtype, arrdata } = {}) { this.chart.setOption({ title: { text: text }, tooltip: { trigger: 'item', formatter: '{a} <br/>{b} : {c} ({d}%)' }, legend: { left: 'center', bottom: '10', data: arrtype }, calculable: true, series: [ { name: '', type: 'pie', roseType: 'radius', radius: [15, 95], center: ['50%', '42%'], data: arrdata, animationEasing: 'cubicInOut', animationDuration: 2600 } ] }) }, initChart() { this.chart = echarts.init(this.$el, 'macarons') this.setOptions(this.pieData); } } }</script>
그러면 하위 컴포넌트가 정상적으로 표시될 수 있습니다
이 글에서는 상위 컴포넌트에서 하위 컴포넌트로 값을 전달하는 문제에 대해 설명합니다. Vue의 하위 구성요소 echarts에 대한 자세한 내용은 PHP Chinese net을 참조하세요.
관련 추천:
자바스크립트 엄격 모드에 대한 자세한 설명
위 내용은 Vue의 상위 구성 요소에서 하위 구성 요소 차트로 값을 전달하는 데 문제가 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!