vue2.0 axios 获取数据报错

数据无法加载,报错怎么解决?求大神解答

<template>
  <div class="recommend">
    <div class="recommend-content">
      <scroll ref="scroll" class="recommend-content">
        <div>
          <div v-if="recommends.length" class="slider-wrapper" ref="sliderWrapper">
            <slider>
              <div v-for="item in recommends">
                <a :href="item.mien_img">
                  <img class="needsclick" @load="loadImage" :src="item.mien_img">
                </a>
              </div>
            </slider>
          </div>
        </div>
      </scroll>
    </div>
  </div>
</template>

<script type="text/ecmascript-6">
  import Slider from 'base/slider/slider'
  import Scroll from 'base/scroll/scroll'
  import axios from 'axios'
  import qs from 'qs'
  const ERR_OK = 200
  export default {
    data() {
      return {
        recommends: []
      }
    },
    created() {
      this.getRecommend()
    },
    methods: {
      getRecommend() {
        var token = JSON.parse(localStorage.token)
        axios.post(url, qs.stringify({
          token: token
        })).then(function(res) {
          console.log(res)
          if (res.status === ERR_OK) {
          this.recommends =res.data.data
          }
        })
      }
    },
    components: {
      Slider,
      Scroll
    }
  }
</script>

图片描述

阅读 3.2k
5 个回答

this.recommends中的this已经不是vue实例了。

getRecommend(){
    let _self = this;
    
    ...
    ...
    ...
    
    _self.recommends = res.data.data
}

在created里面 this.这个方法以及数据是未定义的 你可以在数据加载完成钩子函数里使用 不然它是未定义的

把then里面的函数写成闭包形式 () => {},this就还是原来的vue实例。

this的指向问题。

if (res.status === ERR_OK) {
    console.log(this)  // 查看控制台看看this是什么
  this.recommends =res.data.data
}

解决方案,使用箭头函数

 axios.post(url, qs.stringify({
  token: token
})).then((res) => {
  console.log(res)
  if (res.status === ERR_OK) {
      this.recommends = res.data.data
  }
})

this指向问题,一楼回答很标准了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题