关键词搜索

源码搜索 ×
×

前端笔记-vue cli中v-bind动态数据实时更新

发布2019-07-30浏览7144次

详情内容

目录

 

 

基本概念

代码


 

基本概念

如下的例子,刚开始运行:

点击按钮:

数据库修改下数据:

再点击按钮刷新下:

下面给出请求的json数据:

刷新有2个方式

第一种是强制刷新,这样是有问题的,数据和图表不能同步:

this.$forceUpdate()

本人推荐下面这种方式,通过绑定组建的key值

<barChartItem ref="barItem" v-bind:count="numCount" v-bind:valueList="valueList" v-bind:key="valueList.toString()"></barChartItem>

把key绑定成变动的值,就可以实时刷新了

 

 

代码

程序结构如下:

关键代码

BarCharts.vue

  1. <template>
  2. <div>
  3. <div id="main" style="width: 500px; height:500px"></div>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. props: ['count', 'valueList'],
  9. watch:{
  10. count:val => {
  11. alert(this.count)
  12. }
  13. },
  14. mounted(){
  15. this.initGra();
  16. },
  17. methods: {
  18. //开始画图了
  19. initGra(){
  20. // 基于准备好的dom,初始化echarts实例
  21. let myChart = this.$echarts.init(document.getElementById('main'));
  22. this.getData();
  23. },
  24. getData(){
  25. if (myChart != null && myChart != "" && myChart != undefined) {
  26. myChart.dispose();
  27. }
  28. // 基于准备好的dom,初始化echarts实例
  29. let myChart = this.$echarts.init(document.getElementById('main'));
  30. //初始化数据
  31. let dataList = [];
  32. for(let i = 0; i < this.count; i++){
  33. dataList.push(this.valueList[i]);
  34. }
  35. console.log(this.count)
  36. console.log(this.valueList)
  37. //alert(this.count)
  38. //alert(this.valueList)
  39. // 指定图表的配置项和数据
  40. let option = {
  41. title: {
  42. text: 'ECharts 入门示例'
  43. },
  44. tooltip: {},
  45. legend: {
  46. data:['销量']
  47. },
  48. xAxis: {
  49. data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
  50. },
  51. yAxis: {},
  52. series: [{
  53. name: '销量',
  54. type: 'bar',
  55. data: dataList
  56. }]
  57. };
  58. // 使用刚指定的配置项和数据显示图表。
  59. myChart.setOption(option);
  60. }
  61. }
  62. }
  63. </script>
  64. <style scoped>
  65. .item{
  66. color: green;
  67. }
  68. </style>

main.js

  1. // The Vue build version to load with the `import` command
  2. // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
  3. import Vue from 'vue'
  4. import Axios from 'axios'
  5. import echarts from 'echarts'
  6. import TestEChart from './TestEChart'
  7. Vue.config.productionTip = false
  8. Vue.prototype.$axios=Axios
  9. Vue.prototype.$echarts = echarts
  10. /* eslint-disable no-new */
  11. new Vue({
  12. el: '#app',
  13. components: { TestEChart },
  14. template: '<TestEChart/>',
  15. })

TestEChart.vue

  1. <template>
  2. <div>
  3. <barChartItem ref="barItem" v-bind:count="numCount" v-bind:valueList="valueList" v-bind:key="valueList.toString()"></barChartItem>
  4. <div>
  5. <button @click="handleSubmit">获取</button>
  6. </div>
  7. </div>
  8. </template>
  9. <script>
  10. import BarChartItem from './components/BarCharts'
  11. export default {
  12. data() {
  13. return {
  14. numCount: 0,
  15. valueList: []
  16. }
  17. },
  18. components: {
  19. 'barChartItem' : BarChartItem
  20. },
  21. methods: {
  22. handleSubmit(){
  23. this.$axios({
  24. type: 'get',
  25. url: '/gra/list'
  26. }).then(res => {
  27. //console.log(res.data.data)
  28. let jsonTest = res.data.data.content
  29. //目前只有1条数据 展示这么写
  30. this.numCount = jsonTest[0].count
  31. this.valueList = jsonTest[0].value;
  32. //console.log(this.numCount)
  33. //console.log(this.valueList)
  34. this.$refs.barItem.getData()
  35. //this.$set()
  36. //this.$forceUpdate()
  37. }).catch(err=>{
  38. alert(err)
  39. })
  40. },
  41. }
  42. }
  43. </script>
  44. <style>
  45. </style>

 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载