【问题标题】:Vue-chartjs: Re-render a chart even if data hasn't changedVue-chartjs:即使数据没有改变也重新渲染图表
【发布时间】:2018-05-22 14:52:58
【问题描述】:

我有一个包含两个图表的组件,我在按钮单击时显示。我使用图表的相同组件,但我通过两个不同的吸气剂给它不同的chartData。图表如下所示:

<script>
import { Bar, mixins } from 'vue-chartjs';

export default {
extends: Bar,
mixins: [mixins.reactiveProp],
props: ['chartData', 'options'],
mounted() {
   this.renderChart(this.chartData, this.options);
  },
};
</script>

我知道reactiveProp 会在数据发生变化时呈现一个新图表(并初始化漂亮的动画)。但目前两个吸气剂为this.chartData 提供相同的数据,所以当我尝试切换图表时,它保持不变。有什么方法可以更新或销毁数据,以便重新渲染图表,即使它从另一个 getter 获取相同的数据?由于某些原因,update()、destroy()、clear() 等方法没有奏效,但可能是我在错误的地方使用了它们。

这是我的图表页面:

<template>
 <div>
  <button @click="showAll = false">
          Show old users
  </button>
  <button @click="showAll = true">
          Show all users
  </button>
  <chart v-if="isChartData === true && showAll === false" :options="options" :chart-data="setDataOld" />
  <chart v-if="isChartData === true && showAll === true" :options="options" :chart-data="setData" />
 <div>
<template>

【问题讨论】:

  • 使用key
  • 谢谢。我使用了它,现在每次单击按钮时都会重新渲染图表,但控制台显示:避免使用非原始值作为键,而是使用字符串/数字值。我添加了这样的密钥:&lt;chart v-if="isChartData === true &amp;&amp; showAll === false" :options="options" :chart-data="setDataOld" :key="setDataOld" /&gt;
  • 我想你想要:key="'setDataOld'"。如果要使用显式字符串,则需要在双引号内使用单引号(反之亦然)。基本上,您不希望您的键是一个对象,您希望它是一些原始值,并且它不必是任何 特定 值,它只需要与图表不同一和图二。真的,你可以在你的情况下使用:key="1":key="2"

标签: javascript vue.js chart.js vue-chartjs


【解决方案1】:

这应该可行。注意keys

<chart :key="1" v-if="isChartData === true && showAll === false" :options="options" :chart-data="setDataOld" />
<chart :key="2" v-if="isChartData === true && showAll === true" :options="options" :chart-data="setData" />

本质上,您希望能够向 Vue 提供有关这两个图表的区别的提示,以便它明确知道要渲染哪个图表,而不是使用其默认的组件重用策略。

【讨论】:

  • 非常感谢!这个解决方案非常简单,但我绝不会考虑使用key,除非您需要使用v-for 列出列表。现在一切正常。
猜你喜欢
  • 2019-01-03
  • 2020-09-24
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2023-01-10
  • 2019-03-12
相关资源
最近更新 更多