Vue3 mounted()里调用axios的方法,遇到的坑

最近在学习vue3做项目。

很简单的一个需求,居然遇到了很多坑.....

我的vue对象里,有个data属性tableData,用于给页面绑定数据。

data() {
         return {tableData: [] }
}

我希望在mounted()里使用axios去后台拿数据

mounted() {
                axios.get('/ajax/getScoreList').then(response => {
                    this.tableData = response.data;
                });
}

这样实现没问题,但是我想把axios的调用写到methods方法里,坑来了。。。

我想当然的写到一个方法里,然后在mounted里调用

methods: {
    getScoreList: function(callback){
          axios.get('/ajax/getScoreList').then(response => {
            this.tableData = response.data;
          });
    }
},
mounted() {
                this.getScoreList()
},

没有效,this.tableData是空的。

然后网上找了一圈,建议methods的方法 return一个返回值。

于是参考网上的方法修改为:

methods: {
    getScoreList: function(callback){

                let res;
                axios.get('/ajax/getScoreList').then(response => {
                     res = response.data;
                  });

                return res;
        }

},

mounted() {
                this.tableData = this.getScoreList();
}

发现还是拿不到值。

令人惊讶的是,如此简单的需求,在网上几乎找不到正确的解决方法。(不得不吐槽现在的csdn,好多都是复制别人的代码,很多根本就是错的也在复制,浪费时间误人子弟。当然我不是说所有人,大部分都是这种没用的文章),最后好不容易才找到一个解决方法,是需要用回调函数:

methods: {
               getScoreList: function(callback){
                      axios.get('/ajax/getScoreList').then(response => {
                        callback(response.data);
                      });
                },
                getScoreListCallback: function(data){
                      this.tableData = data;
                }

},

mounted() {
               this.getScoreList(this.getScoreListCallback);
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值