uni-app,微信小程序中,使用ucharts配合uview的tabs,切换时图表重叠
uni-app,微信小程序中,使用ucharts配合uview的tabs,切换时图表重叠
问题描述
使用v-show
发生重叠,使用v-if
图表不加载
<view class="form-card mb-15" v-if="cuurenTypeValue === 2">
<qiun-data-charts
type="line"
opts="opts"
reshow="cuurenTypeValue === 2"
chartData="chartData"
canvas2d="true"
canvasId="MawdhxCzugjPaOwlPuEHeHgTMxVNbkCc"/>
</view>
1 回复
在uni-app中使用ucharts配合uview的tabs组件时,遇到图表重叠的问题,通常是因为在切换tabs时,前一个tab的图表没有被正确销毁或隐藏,而新的图表又直接渲染在了相同的位置。为了解决这个问题,你可以在每个tab切换时,对前一个tab的图表进行销毁操作,或者隐藏前一个tab的图表容器,确保每次只渲染一个图表。
以下是一个简单的示例代码,展示了如何在uni-app中结合ucharts和uview的tabs组件,实现切换时不重叠图表的功能。
- 页面结构 (
pages/index/index.vue
):
<template>
<view>
<u-tabs @change="handleTabChange" :list="tabList"></u-tabs>
<view v-if="currentTab === 'chart1'">
<canvas canvas-id="chart1" style="width: 100%; height: 400px;"></canvas>
</view>
<view v-if="currentTab === 'chart2'">
<canvas canvas-id="chart2" style="width: 100%; height: 400px;"></canvas>
</view>
</view>
</template>
<script>
import * as uCharts from '@/static/ucharts.min.js';
export default {
data() {
return {
tabList: [{title: 'Chart 1'}, {title: 'Chart 2'}],
currentTab: 'chart1',
chart1: null,
chart2: null,
};
},
methods: {
handleTabChange(index) {
this.currentTab = this.tabList[index].title;
this.destroyChart();
this.initChart();
},
destroyChart() {
if (this.chart1) {
this.chart1.clear();
this.chart1 = null;
}
if (this.chart2) {
this.chart2.clear();
this.chart2 = null;
}
},
initChart() {
if (this.currentTab === 'chart1') {
this.chart1 = new uCharts({
// 配置项
canvasId: 'chart1',
type: 'line',
// 其他配置...
});
} else if (this.currentTab === 'chart2') {
this.chart2 = new uCharts({
// 配置项
canvasId: 'chart2',
type: 'bar',
// 其他配置...
});
}
}
},
onReady() {
this.initChart();
}
};
</script>
- 说明:
- 使用
u-tabs
组件来创建tab切换效果。 - 根据
currentTab
的值动态渲染对应的canvas
元素。 - 在
handleTabChange
方法中,先调用destroyChart
方法销毁前一个tab的图表实例,然后调用initChart
方法初始化当前tab的图表实例。 - 在
destroyChart
方法中,检查并销毁当前已存在的图表实例。 - 在
initChart
方法中,根据当前tab初始化对应的图表实例。
- 使用
通过这种方式,你可以确保在切换tabs时,图表不会重叠,且每次只渲染一个图表。