axios 如何将后端返回的数据填充 v-charts 里面呢?

2017-12-11 20:05:18 +08:00
 SlipStupig

被折磨一天了,用 axios 请求的数据死活不能填充到 v-charts 里面,代码如下:


<template>
  <el-contaner>
    <el-header>
      <TopBar></TopBar>
    </el-header>
    <el-main>
      <div class="dashbraod">
        <ve-pie :data="chartData" :settings="chartSettings"></ve-pie>
      </div>
    </el-main>
  </el-contaner>
</template>

<style>
  .dashbraod{
    position: relative;

  }
</style>

<script>
  import TopBar from './Navbar'
  import axios from 'axios'
  import { Message } from 'element-ui'

  export default {
    name: 'Console',
    data () {
      return {
        chartData: {
          rows: [],
          columns: ['id', 'total']
        },
        chartSettings: {
          dimension: 'id',
          metrics: 'total'
        }
      }
    },
    components: {
      TopBar
    },
    method: {
    },
    created: function () {
      alert('Be mounted')
      axios.get('http://localhost/data/Statistic').then(function (res) {
        for (let i = 0; i < res.data.length; i++) {
          this.chartData.rows.push(res.data[i])
        }
      }).catch(function (res) {
        Message.error(res.toString())
      })
      alert(this.chartData.rows)
    }
  }
</script>

请教各位,怎么改才能将 axios 的数据填充到chartData.rows里面呢?

7136 次点击
所在节点    Node.js
14 条回复
zhoulouzi
2017-12-11 20:14:46 +08:00
目测 this,毕竟没写过前端
wwqgtxx
2017-12-11 20:32:58 +08:00
把 then 后面的 function 换成剪头函数,而且我记得在 created 中是不能修改数据的,要在 mounted 之后
TimRChen
2017-12-11 20:33:50 +08:00
没找到你用的 v-chart...不过我认为此处可以把 v-bind:data=""改成 v-modal=""
TimRChen
2017-12-11 20:34:56 +08:00
@wwqgtxx 此处写不写箭头函数有影响吗?不过第二句话说得对。
SlipStupig
2017-12-11 20:34:57 +08:00
@wwqgtxx 我其实只是想填充一下数据画一个“饼图”,但是似乎只要动态填充就不行 !=_=
SlipStupig
2017-12-11 20:36:02 +08:00
TimRChen
2017-12-11 20:36:45 +08:00
TimRChen
2017-12-11 20:37:57 +08:00
const _self = this;
应该可解决问题
SlipStupig
2017-12-11 20:42:44 +08:00
@TimRChen 问题的重点不是 this 的问题,而是图画不出来.....
wwqgtxx
2017-12-11 22:52:30 +08:00
@TimRChen 写箭头函数就是间接的改变了 this 的指向呀
TimRChen
2017-12-12 00:04:08 +08:00
@SlipStupig 在 axios 里的回调函数中 this 值为 undefined,但此程序明显是想把数据存储存储到 chartData.row 中,但此时你的 this 指向的并不是 vue 实例,所以 chartData.row 也是 undefined,也就是说,你的数据传递发生了问题。
TimRChen
2017-12-12 00:06:21 +08:00
我倒是建议你先尝试下在生命周期函数中先把 this 存入一个变量中,然后操作这个变量看下结果
l12ab
2017-12-12 00:37:42 +08:00
说句题外话,el-main 在 ie11 下只显示一点点的高度,如何解决的
SlipStupig
2017-12-12 07:15:47 +08:00
@l12ab 修改绑定样式 :style

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/413869

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX