vue+echarts结合使用,动态更新数据及数据变化重新渲染问题

 

话不多说:先看实现效果图:点击下拉框,更改原数据,折线图实时渲染。

一、echarts基本使用

1. 安装echarts

npm install echarts --save

这里说明一下问题,如果不加版本号,默认安装最新版。问题是最新版在下面的引入会报错 ,所以我安装了@4.9.0版的echarts,使用起来没问题。

npm install echarts@4.9.0 --save

2. 我使用的vue cli3,需要在main.js文件中全局引入echarts

// 全局引入echarts组件用于绘制图表
import echarts from 'echarts'
Vue.prototype.$echarts = echarts

3. 在.vue文件里直接使用即可。

<template>
  <div>
    <div id="chartLineBox" style="width: 100%;height: 360px;"></div>
  </div>
</template>

<script>
export default {
  name: 'FreshmenManageAdmitted',
  data () {
    return {
      // 指定图表的配置项和数据
      option: {
        tooltip: { // 设置tip提示
            trigger: 'axis'
        },
        legend: { // 设置区分(哪条线属于什么)
        },
        xAxis: { // 设置x轴
            type: 'category',
            boundaryGap: false, // 坐标轴两边不留白
            data: ['2021-3-1', '2021-3-2', '2021-3-3', '2021-3-4', '2021-3-5', '2021-3-6', '2021-3-7'],
            name: '日期', // X轴 name
            nameTextStyle: { // 坐标轴名称的文字样式
                fontSize: 16,
                padding: [0, 0, 0, 20]
            }
        },
        yAxis: {
            name: '正确率',
            nameTextStyle: {
                fontSize: 16,
                padding: [0, 0, 10, 0]
            },
            type: 'value'
        },
        series: [{ name: '拍手', data: [40, 70, 80, 30, 60, 50, 90], type: 'line' },
                 { name: '找小狗', data: [70, 40, 50, 80, 30, 90, 50], type: 'line' }]
      }
    }
  },
  mounted () {
    this.chartChange()
  },
  methods: {
    chartChange () {
      const myEcharts = this.$echarts.init(document.getElementById('chartLineBox'), 'vintage')
      // 使用刚指定的配置项和数据显示图表。
      myEcharts.setOption(this.option, true)
    }
  }
}
</script>

4. 使用官方的样式,网址:https://echarts.apache.org/zh/theme-builder.html

下载选择的样式.js文件即可使用,网站支持自定义样式,并导出代码,比女朋友都贴心-.-有木有。

js代码:
// 三种样式表,可以选择一种使用
import 'assets/css/macarons.js'
import 'assets/css/customed.js'
import 'assets/css/vintage.js'


this.myEcharts = this.$echarts.init(document.getElementById('chartLineBox'), 'vintage')
this.myEcharts.setOption(this.option, true)

二、数据动态绑定及表格实时渲染问题

先上代码:当然是使用watch啦,watch大法好啊,为了数据变化时实时刷新表格,在监听到属性值发生改变时,重新渲染一次表格。

敲重点:echarts不会自动帮你渲染数据的,需要手动再次调用setOption函数。

再次敲重点,重点,重点:看到 this.myEcharts.setOption(this.option, true)这一行代码了吗?最后这个属性'true'真是nb坏了,没它不行。

上官方代码:setOption的函数定义,option是指图表的配置项和数据,notMerge是指是否不跟之前设置的 option 进行合并。默认为 false。即表示合并。如果为 true,表示所有组件都会被删除,然后根据新option 创建所有新组件。

也就是说如果不设置noeMerge就会自动合并数据,离谱!千万要设置,千万要设置,千万要设置。

(option: Object, notMerge?: boolean, lazyUpdate?: boolean)
or
(option: Object, opts?: {
    notMerge?: boolean;
    replaceMerge?: string | string[];
    lazyUpdate?: boolean;
})
export default {
  name: 'StudentCourseDataChart',
  props: {
    xData: {
      type: Array,
      default () {
        return []
      }
    },
    yData: {
      type: Array,
      default () {
        return []
      }
    }
  },
  watch: {
    'xData': function (val) {
      this.chartChange()
    },
    'yData': function (val) {
      this.chartChange()
    }
  },
  methods: {
    chartChange () {
      this.myEcharts = this.$echarts.init(document.getElementById('chartLineBox'), 'vintage')
      this.option.xAxis.data = this.xData
      for (var i = 0; i < this.yData.length; i++) {
        this.yData[i]['type'] = 'line'
      }
      this.option.series = this.yData
      // 使用刚指定的配置项和数据显示图表。
      this.myEcharts.setOption(this.option, true)
    }
  }

数据部分如下:上面的循环添加'type'属性只是为了简化原数据内容,若不加这个属性会报错。 

const StudentCourseChartDataX = ['2021-3-1', '2021-3-2', '2021-3-3', '2021-3-4', '2021-3-5', '2021-3-6', '2021-3-7']
const StudentCourseChartDataY = [{ name: '拍手', data: [40, 70, 80, 30, 60, 50, 90] },
                                 { name: '找小狗', data: [70, 40, 50, 80, 30, 90, 50] }]

 也可以使用计算属性实时更新数据,这里就不展示了。

 

  • 29
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 可以使用 echarts.setOption() 方法动态接入数据。例如:echarts.setOption({series: [{data: data}]}),其中data是一个数组,存放你要接入的数据。 ### 回答2: Vue ECharts是一个用于在Vue.js应用程序中实现图表可视化的库。要实现动态接入数据,可以按照以下步骤进行操作: 1. 引入Vue ECharts库:在项目中使用npm或者cdn等方式引入Vue ECharts库,可以参考官方文档中的安装说明。 2. 创建图表组件:在Vue组件中,创建一个容器用于显示图表,同时在生命周期钩子函数中初始化ECharts实例。 3. 定义图表配置项:在组件的data中定义一个对象,用于存储图表的配置项。配置项可以包括图表类型、数据、样式等信息。 4. 动态接入数据:在需要接入数据的时候,可以通过获取数据的接口或者其他方式获取数据,并将数据更新到图表的配置项中。 5. 更新图表:在接入数据后,调用ECharts的setOption方法,将更新后的配置项传递给ECharts实例,从而更新图表的显示。 以下是一个简单的示例代码: ```vue <template> <div ref="chartContainer" style="width: 400px; height: 300px;"></div> </template> <script> import echarts from 'echarts'; export default { data() { return { chartOptions: { xAxis: { type: 'category', data: ['A', 'B', 'C', 'D', 'E'] }, yAxis: { type: 'value' }, series: [{ data: [], type: 'bar' }] } } }, mounted() { this.chart = echarts.init(this.$refs.chartContainer); this.chart.setOption(this.chartOptions); // 模拟接入数据 setTimeout(() => { this.chartOptions.series[0].data = [50, 30, 20, 40, 10]; this.chart.setOption(this.chartOptions); }, 2000); } } </script> ``` 在上述示例中,首先引入了ECharts库,然后在mounted生命周期钩子函数中,通过调用echarts.init方法初始化了ECharts实例,并将配置项传递给了实例。在模拟接入数据的代码中,通过修改配置项中的数据更新了图表的显示。 ### 回答3: Vue Echarts 是一个基于 Vue.js 的开源图表库,用于创建和展示各种类型的图表。要动态接入数据,你需要做以下几个步骤: 1. 安装 echartsvue-echarts:首先,你需要安装 echartsvue-echarts。你可以通过 npm 或者 yarn 来进行安装。在你的 Vue 项目中运行以下命令: ``` npm install echarts vue-echarts ``` 2. 引入 echartsvue-echarts:在你的组件中,需要引入 echartsvue-echarts。你可以在 main.js 或者需要使用图表的组件中引入: ```javascript import echarts from 'echarts' import ECharts from 'vue-echarts/components/ECharts' Vue.use(ECharts) ``` 3. 创建图表组件:在你的组件中,创建一个 ECharts 组件,用于展示图表,同时绑定一个数据对象,用于接收动态数据: ```vue <template> <div> <e-charts :options="chartOptions" style="height: 300px;"></e-charts> </div> </template> <script> export default { data() { return { chartOptions: {} // 用于接收动态数据 } }, mounted() { // 在组件挂载完成后,可以从后端或其他数据源获取数据 // 并将数据绑定到 chartOptions 对象中 this.getData() }, methods: { async getData() { // 使用异步函数从后端获取数据 const data = await this.$axios.get('/api/data') // 处理数据,并将结果绑定到 chartOptions 对象中 this.chartOptions = { ... // 配置图表样式和数据 } } } } </script> ``` 4. 配置图表样式和数据:在 `getData` 方法中,你可以从后端获取到数据并对其进行处理,然后将结果绑定到 `chartOptions` 对象中。`chartOptions` 对象中包含了图表的样式和数据,你需要根据你的需求进行配置。 以上就是在 Vue动态接入数据使用 Vue Echarts 的基本步骤。你可以根据你的具体情况进行相应的修改和调整。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值