const setDivChartData = (data,tabType) => {
let xAxisData:any[] = [];
if(tabType === 'first') {
const mapBaseData = data.map(item => item.base);
const xAxisData = [...new Set(mapBaseData)];
const yAxisData = getYDivChartDataByBase(xAxisData,data);
console.log(yAxisData,'yAxisData');
const sortYAxisData = yAxisData.sort((a, b) => Number(b.name) - Number(a.name));
const mapNameList = sortYAxisData.map(item => item.name);
echartLayoutVal.value.byDivison.option.legend.data = mapNameList;
echartLayoutVal.value.byDivison.option.xAxis.data = xAxisData;
echartLayoutVal.value.byDivison.option.series = setDivBaseChartDefaultColor(sortYAxisData);
} else if(tabType === 'second') {
xAxisData = monthList;
}
};
vue3+echarts项目中改变echartLayoutVal.value.byDivison.option.series,为什么界面echart图没有更新
以下是完整的代码
const setDivChartData = (data, tabType) => {
let xAxisData = [];
if (tabType === 'first') {
const mapBaseData = data.map(item => item.base);
xAxisData = [...new Set(mapBaseData)];
const yAxisData = getYDivChartDataByBase(xAxisData, data);
console.log(yAxisData, 'yAxisData');
const sortYAxisData = yAxisData.sort((a, b) => Number(b.name) - Number(a.name));
const mapNameList = sortYAxisData.map(item => item.name);
echartLayoutVal.value.byDivison.option.legend.data = mapNameList;
echartLayoutVal.value.byDivison.option.xAxis.data = xAxisData;
// 创建一个新数组并赋值给 series
echartLayoutVal.value.byDivison.option.series = [...setDivBaseChartDefaultColor(sortYAxisData)];
} else if (tabType === 'second') {
xAxisData = monthList;
}
};
具体改动如下
// 原来的代码
// echartLayoutVal.value.byDivison.option.series = setDivBaseChartDefaultColor(sortYAxisData);
// 修改后的代码
echartLayoutVal.value.byDivison.option.series = [...setDivBaseChartDefaultColor(sortYAxisData)];
### 回答
在你的代码中,虽然你更新了 `echartLayoutVal.value.byDivison.option` 的内容,但是你没有触发 ECharts 实例的重新渲染。在 Vue 3 中,如果你直接修改了 ECharts 配置对象而没有通过 Vue 的响应式系统来更新,ECharts 可能不会检测到这些变化并重新渲染图表。
为了解决这个问题,你可以在更新 ECharts 配置后,手动调用 ECharts 实例的 `setOption` 方法来触发重新渲染。这里是一个可能的修改方式:
const setDivChartData = (data, tabType) => {
let xAxisData = [];
if (tabType === 'first') {
const mapBaseData = data.map(item => item.base);
xAxisData = [...new Set(mapBaseData)];
const yAxisData = getYDivChartDataByBase(xAxisData, data);
console.log(yAxisData, 'yAxisData');
const sortYAxisData = yAxisData.sort((a, b) => Number(b.name) - Number(a.name));
const mapNameList = sortYAxisData.map(item => item.name);
const newOption = {
legend: {
data: mapNameList
},
xAxis: {
data: xAxisData
},
series: setDivBaseChartDefaultColor(sortYAxisData)
};
// 假设 echartsInstance 是你的 ECharts 实例
echartsInstance.setOption(newOption);
} else if (tabType === 'second') {
xAxisData = monthList;
// 同样需要更新 option 并调用 setOption
const newOption = {
xAxis: {
data: xAxisData
}
// 可能还需要更新其他部分,根据实际情况添加
};
echartsInstance.setOption(newOption);
}
};
在这个修改中,我创建了一个新的 `newOption` 对象来存储更新后的配置,并使用 `echartsInstance.setOption(newOption)` 来更新图表。确保 `echartsInstance` 是你通过 `echarts.init` 方法初始化的 ECharts 实例。
注意:你需要根据你的实际项目结构来获取 `echartsInstance`。通常,这会在你的 Vue 组件的 `mounted` 钩子或类似的生命周期钩子中完成。
echarts图表渲染不出来,查看元素canvas标签都没有。 需求:在表格内点击生成echart图 解决:表格数据渲染,其中一列判断为csv属性后,实现在单元格内点击文字,触发dialog弹窗,弹窗中显示echart图表。 模板: data: dialogTableVisible: false methods: 渲染出来了(可能一开始就渲染出来没注意到),但是弹窗上不显示,而是后面阴影部分显示出
图例: 因为是单柱多数据,导致myChart.on后params,会有两条。重复点甚至会有多条。目前只想获取点击对应一次params.name。 事件代码: 已解决 myChart.off('click') //!防止重复
请问大佬们,当鼠标移动echarts散点图某个点的时候,当两个点数据重合了的时候,如何能够正确的将重合的点数据全部显示出来呢? 我通过tooltip下的formatter函数这样写的,但是显示出来的数据有错误? 错误显示: 正确的显示应该是 BDS:5,81,33。GALILEO:5,81,33。 请大佬们指点指点,谢谢!!!
在线demo 鼠标悬停在任意一个bar上,底部的bar会消失。怎么配置让底部bar背景颜色一直存在。
EChart 是 iOS 上一个柱状图组件,实现动态增长的动画效果,支持点击或者长按事件。
场景是有一个主应用里面有多个子应用,其中a应用嵌入iframe(b应用)展示,可点击弹窗大屏展示; 问题1:a应用进来iframe展示操作没问题,但是点击大屏显示的时候控制台明明打印出来数据但是b应用页面没更新,使用强制刷新forceUpdate和局部刷新this.$nextTick都不好使,使用v-if也是初次进来有触发信息但是页面还是没有显示 问题2:c应用引入iframe(b应用),有复制和
时间8.31 base深圳 吹爆面试官,体验很好,不过也很开心 面试官先自我介绍,开摄像头,很和蔼 做题,给了一个叉叉图标,问不用图片可以怎么实现(脑子懵了,答了svg和canvas绘制,不知道想考什么) 做题,try catch块里的输出 项目拷打,lz主要聊了webworker和大文件上传,面试官会边听边记录重点,面试官会问需求和根据重点细节探讨,20min Vue3相对Vue2的最大的改进