VueJs和ChartJs - Chart在宽度上有响应,但在高度上没有响应?

cuxqih21  于 2023-11-18  发布在  Chart.js
关注(0)|答案(3)|浏览(181)

我已经尝试了几乎所有的方法,但不能让我的图表的高度响应。
宽度工作完美,它是响应和相应的调整,但由于某种原因,高度停留在400px锁定?
在我的主Vue应用程序中,我调用我的组件(传入图表数据):
第一个月
组件ProjectedCumulativeSavings.vue的代码是:

<template>
    <div class="chart-container" >
        <bar-chart
            :chart-data="datacollection"
            :options="options"
            chart-id="projectedCumulativeSavings"
        />
    </div>
</template>

<script>
import BarChart from '../mixins/BarChart.js'

export default {
    components: {
        BarChart
    },
    props: {
        datacollection: ''
    },
    data() {
        return {
            options: {
                maintainAspectRatio: false,
                responsive: true,
                title: {
                    display: true,
                    text: 'Projected Cumulative Savings',
                    fontSize: 18
                },
                legend: {
                    display: false
                },
                scales: {
                    yAxes: [{
                        ticks: {
                            // Include a dollar sign in the ticks
                            callback: function (value, index, values) {
                                return 'R' + value.toLocaleString('en')
                            }
                        }
                    }]
                }
            }
        }
    },
    created() {
    },
    computed: {
    }
}
</script>

<style >
.chart-container {
    min-width: 375px;
    max-width: 1024px;
    /* margin: 30px; */
    position: relative;
    width: 100%;
    height: 40vw;
}
</style>

字符串
BarChart.js代码是:

import { Bar, mixins } from 'vue-chartjs'
const { reactiveProp } = mixins

export default {
    extends: Bar,
    mixins: [reactiveProp],
    props: ['options'],
    mounted() {
        // this.chartData is created in the mixin.
        // If you want to pass options please create a local options object

        this.renderChart(this.chartData, this.options)
    },
    watch: {
        chartData() {
            this.$data._chart.update()
        }
    }
}

8oomwypt

8oomwypt1#

我遇到了同样的问题,发现了这个。
https://www.chartjs.org/docs/latest/general/responsive.html#important-note
试试这个

<bar-chart
        :chart-data="datacollection"
        :options="options"
        :styles="myStyles"  <-- add this
        chart-id="projectedCumulativeSavings"
    />

字符串

computed: {
        myStyles() {
          return {
            height: '20vh',   <-- this makes your chart responsive
            position: 'relative',
          };
    },

s71maibg

s71maibg2#

唯一对我有用的是设置组件的高度和宽度:

<BarChart
   :chart-data="chart2Data"
   :options="chart2Options"
   :key="chart2Trigger"
   :height="2"
   :width="4"
 />

字符串

z3yyvxxp

z3yyvxxp3#

我使用Vue 3和vue-chartjs,解决了同样的问题。我的解决方案是设置选项{ response : false },然后设置样式对象与计算。
像这样,首先设置计算样式:

const chartStyle = computed(() => {
  return {
    height: '20vh',
    width: '100%',
    position: 'relative',
  }
})

字符串
然后添加到<Bar>风格的 prop 中

<Bar
  :style="chartStyle"
/>


希望这个解决方案能有所帮助。

相关问题