0

我正在使用 API,将结果保存在数据中,然后v-for用于在表格中列出该数据。其中一列包含一个 vuechart,但我似乎无法让它显示任何内容。如果我检查创建的组件,它在 props 数组中有数据,但在获取条形时没有骰子。

将 vuechart 图表放入v-for循环有什么特别之处吗?还是我没有正确传递一些东西?

这是代码:

趋势图.js

import {Bar} from 'vue-chartjs'

export default {
  extends: Bar,
  name: 'TrendChart',
  props: ['data', 'options'],
  mounted() {
    this.renderChart(this.data, this.options)
  }
}

结果.vue

<table>
  <tr v-for="result in results">
  ...
  <td>
    <trend-chart :data="result.trends", :options="{responsive: false, maintainAspectRatio: false}"></trend-chart>
  ...
</table>

如果我在渲染组件后检查组件,我会看到道具在那里,但数据似乎并没有进入图表,或者我假设,我从未见过成功的(这是输出文本格式的 Vue 开发工具):

props
  chartId:"bar-chart"
  cssClasses:""
  data:Array[12]
  height:400
  options:Object
  maintainAspectRatio:false
  responsive:false
  plugins:Array[0]
  styles:undefined
  width:400

data
  _chart:Unknown Component
  _plugins:Array[0]
4

1 回答 1

0

检查Vue Chart Guide,第一个参数this.renderChart()是一个对象而不是一个数组。

例如从上面的指南复制:

{
  labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
  datasets: [
    {
      label: 'GitHub Commits',
      backgroundColor: '#f87979',
      data: [40, 20, 12, 39, 10, 40, 39, 80, 40, 20, 12, 11]
    }
  ]
}

修复它,然后图表应该可以正常工作。

下面是一个简单的演示:

Vue.config.productionTip = false
let RawLineChart = window.VueChartJs.Bar
Vue.component('line-chart', {
  extends: RawLineChart,
  props: ['data', 'options', 'name'],
  mounted () {
    this.renderChart({
      labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
      datasets: [
        {
          label: this.name,
          backgroundColor: '#f87979',
          data: this.data
        }
      ]
    }, this.options)
  }
})

new Vue({
  el: '#app',
  data() {
    return {
      results: [
        {name:'Chart A', trends: [40, 39, 20, 40, 39, 80, 40]},
        {name:'Chart B', trends: [140, 139, 110, 140, 139, 80, 140]},
        {name:'Chart C', trends: [240, 139, 210, 140, 239, 80, 240]}
      ]
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.min.js"></script>
<script src="https://unpkg.com/vue-chartjs/dist/vue-chartjs.min.js"></script>
<div id="app">
<table>
  <tr v-for="result in results">
  <td>{{result.name}}</td>
  <td>
    <line-chart :data="result.trends" :name="result.name" :options="{responsive: false, maintainAspectRatio: false}">
    </line-chart>
    </td>
    </tr>
</table>
</div>

于 2018-08-21T21:59:40.037 回答