vue 数据更新后,echarts图表不更新
在获取数据后echarts图表不会根据数据更新props: ['RyZcPjgzTable1'], // 介绍父组件传过来的数据// 监听数据// 每当数据发生变化后都会触发这个事件给alldata 重新赋值在重新调用更新数据的方法watch: {RyZcPjgzTable1: function (newVal) {this.allData = []newVal.forEach(item =>
·
在获取数据后 echarts图表不会根据数据更新
props: ['RyZcPjgzTable1'], // 介绍父组件传过来的数据
// 监听数据
// 每当数据发生变化后 都会触发这个事件 给alldata 重新赋值 在重新调用更新数据的方法
watch: {
RyZcPjgzTable1: function (newVal) {
this.allData = []
newVal.forEach(item => {
this.allData.push({
name: item.FL,
value: item.BYZ
})
})
this.getData()
// console.log(this.allData, 1111)
}
},
下面是全部代码
<!-- 平均工资图表 -->
<template>
<div class="com-container" ref="chartColumn">
<div class="charts"></div>
</div>
</template>
<script>
import echarts from 'echarts'
export default {
props: ['RyZcPjgzTable1'], // 介绍父组件传过来的数据
// 监听数据
// 每当数据发生变化后 都会触发这个事件 给alldata 重新赋值 在重新调用更新数据的方法
watch: {
RyZcPjgzTable1: function (newVal) {
this.allData = []
newVal.forEach(item => {
this.allData.push({
name: item.FL,
value: item.BYZ
})
})
this.getData()
// console.log(this.allData, 1111)
}
},
data () {
return {
chartColumn: null,
allData: [],
startValue: 0, // 区域缩放的起点值
endValue: 7, // 区域缩放的终点值
timeId: null
}
},
mounted () {
this.initChart()
// this.getData()
// window.addEventListener('resize', this.screenAdapter)
// this.screenAdapter()
},
methods: {
initChart () {
this.chartColumn = echarts.init(this.$refs.chartColumn)
const initOption = {
tooltip: {
show: true, // 是否显示提示框,默认为true
trigger: 'axis', // 数据项图形触发
axisPointer: {
// 指示样式
type: 'line'
},
padding: 5,
textStyle: {
// 提示框内容的样式
color: '#fff'
}
},
grid: {
x: 65,
y: 30,
x2: 10,
y2: 40
},
xAxis: {
type: 'category',
textStyle: {
fontSize: 14
}
},
yAxis: {
// name: '亿元',
type: 'value',
axisLabel: {
textStyle: {
color: '#fff',
fontSize: 14
}
},
splitLine: {
show: true,
lineStyle: {
color: ['#315070'],
width: 1,
type: 'dashed'
}
}
},
series: [
{
type: 'bar',
radius: '65%',
center: ['50%', '50%']
}
]
}
this.chartColumn.setOption(initOption)
// this.chartColumn.on('mouseover', () => {
// clearInterval(this.timeId)
// })
// this.chartColumn.on('mouseout', () => {
// this.startInterval()
// })
},
getData () {
// 获取服务器的数据, 对this.allData进行赋值之后, 调用updateChart方法更新图表
// this.allData = [
// { name: '供电', value: 63.17 },
// { name: '发电', value: 2360.80 },
// { name: '电建', value: 557.76 },
// { name: '综合能源', value: 419.36 },
// { name: '能源研究', value: 13.86 },
// { name: '股权投资', value: 87.20 },
// { name: '供应链', value: 10.35 },
// { name: '其他', value: 103.93 }
// ]
// 对allData里面的每一个元素进行排序, 从大到小进行
// this.allData.sort((a, b) => {
// return b.value - a.value
// })
this.updateChart()
// this.startInterval()
},
updateChart () {
const colorArr = [
['#1b8eb5', '#51ddf7'],
['#063eaf', '#00a4ff']
]
// 处理图表需要的数据
// 所有省份所形成的数组
const provinceArr = this.allData.map(item => {
return item.name
})
// 所有省份对应的销售金额
const valueArr = this.allData.map(item => {
return item.value
})
const dataOption = {
xAxis: {
data: provinceArr,
axisLabel: {
interval: 0,
rotate: 25,
textStyle: {
color: '#fff',
fontSize: 15
}
}
},
dataZoom: {
show: false,
startValue: this.startValue,
endValue: this.endValue
},
series: [
{
data: valueArr,
barWidth: 15,
itemStyle: {
barBorderRadius: [10, 10, 0, 0],
color: arg => {
let targetColorArr = null
if (arg.value > 1100) {
targetColorArr = colorArr[0]
} else {
targetColorArr = colorArr[1]
}
return new this.echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: targetColorArr[0]
},
{
offset: 1,
color: targetColorArr[1]
}
])
}
}
}
]
}
this.chartColumn.setOption(dataOption)
},
// screenAdapter () {
// const titleFontSize = this.$refs.chartColumn.offsetWidth / 100 * 3
// const adapterOption = {
// title: {
// textStyle: {
// fontSize: titleFontSize
// }
// },
// series: [
// {
// barWidth: titleFontSize,
// itemStyle: {
// barBorderRadius: [titleFontSize / 2, titleFontSize / 2, 0, 0]
// }
// }
// ]
// }
// this.chartColumn.setOption(adapterOption)
// this.chartColumn.resize()
// },
startInterval () {
// 如果 timeid 存在 在启动timeid
// if (this.timeId) {
// clearInterval(this.timeId)
// }
this.timeId = setInterval(() => {
this.startValue++
this.endValue++
if (this.endValue > this.allData.length - 1) {
this.startValue = 0
this.endValue = 5
}
this.updateChart()
}, 2000)
}
}
}
</script>
<style lang="less" scoped>
.com-container {
height: 260px;
width: 480px;
}
</style>
更多推荐
已为社区贡献2条内容
所有评论(0)