面试题答案
一键面试实现思路
- 响应式数据绑定:利用Vue的响应式系统,将数据源定义为响应式数据。这样当数据源变化时,Vue会检测到变化并触发更新。
- watch监听:使用
watch
选项监听数据源的变化。一旦数据源变化,触发相应的更新函数。 - 更新图表:在更新函数中,根据新的数据源重新绘制图表。
关键代码
<template>
<div id="chart"></div>
</template>
<script>
import { Chart } from 'chart.js';
export default {
data() {
return {
chartData: {
labels: [],
datasets: [
{
label: '数据',
data: []
}
]
}
};
},
props: {
// 传入的数据源
sourceData: {
type: Object,
required: true
}
},
mounted() {
this.renderChart();
},
watch: {
sourceData: {
deep: true,
handler(newData) {
this.chartData.labels = newData.labels;
this.chartData.datasets[0].data = newData.data;
this.renderChart();
}
}
},
methods: {
renderChart() {
const ctx = document.getElementById('chart').getContext('2d');
if (this.chart) {
this.chart.destroy();
}
this.chart = new Chart(ctx, {
type: 'bar',
data: this.chartData,
options: {
// 图表配置项
}
});
}
}
};
</script>
在上述代码中:
data
中定义了chartData
用于存储图表的数据。props
接收外部传入的sourceData
数据源。mounted
钩子函数中首次渲染图表。watch
监听sourceData
的变化,一旦变化,更新chartData
并重新调用renderChart
方法重新绘制图表。renderChart
方法负责创建或更新图表实例。