我正在使用EChart和Vue 2,我做了一个简单的EChart组件。
<template>
<div :class="className" :style="{height:height,width:width}" />
</template>
<script>
import * as echarts from 'echarts';
require('echarts/theme/macarons') // echarts theme
export default {
props: {
className: {
type: String,
default: 'chart'
},
width: {
type: String,
default: '100%'
},
height: {
type: String,
default: '300px'
},
chartData: {
type: Object,
required: true
},
autoResize: {
type: Boolean,
default: true,
},
},
watch: {
chartData: {
deep: true,
handler(val) {
console.log('chartdata handler',val);
this.setOptions(val.legend, val.data);
}
},
width: {
deep: true,
handler(val) {
console.log(' width',val);
}
}
},
data() {
return {
chart: null
}
},
mounted() {
this.$nextTick(() => {
this.initChart();
})
},
beforeDestroy() {
if (!this.chart) {
return
}
this.chart.dispose();
this.chart = null;
},
methods: {
initChart() {
this.chart = echarts.init(this.$el, 'macarons');
this.setOptions(
['pepper','rice'],
[
{ value: 0, name: 'pepper' },
{ value: 0, name: 'rice' },
]
);
},
setOptions( lengend, data ) {
this.chart.setOption({
title: {
left: 'center'
},
tooltip: {
trigger: 'item'
},
legend: {
top: '5%',
left: 'center',
data: lengend,
},
series: [
{
name: 'Access From',
type: 'pie',
radius: ['40%', '70%'],
itemStyle: {
borderRadius: [20, 5, 5, 10],
borderColor: '#fff',
borderWidth: 2
},
label: {
show: false
},
data: data
}
]
});
}
}
}
</script>
我在另一个父级中使用此组件。
<PieChart ref="pieChart" :chartData="pieData" :width="'400px'"> </PieChart>
data () {
return {
pieData: {
name: 'crop distribution',
data:[
{ value: 115, name: 'pepper' },
{ value: 128, name: 'rice' }
],
legend:['pepper','rice']
},
}
然而,这段代码永远不会将chartData
传递给PieChart
来更新图表。我查看并发现:
watch: {
chartData: { deep: true,
handler(val) {
console.log('chartdata handler',val);
this.setOptions(val.legend, val.data);
}
},
}
这个watch函数没有被触发,还没有控制台输出。watch在其他Vue应用程序中运行良好,但是当与EChart集成时,这里没有工作。
1条答案
按热度按时间x33g5p2x1#
很确定你只是在监视器上缺少了
immediate: true
:如果没有它,观察器不会在初始化期间触发,只有在数据更改之后才会触发。因此,如果您从未更改数据(并且看起来不像您这样做),则观察器永远不会运行。
添加该属性会将其更改为一个eager watcher,在第一次设置数据时运行(v2的相关文档很差,但在v3中工作相同)。
这样行吗