vue 异步修改data中的值不生效

文章讲述了在Vue项目中遇到的问题,即在异步操作后无法获取到data中更新的值。作者解释了Vue的响应式系统原理,并提供了使用this.$set正确修改数组以及在异步函数中通过Promise解决数据更新延迟的问题。通过在mounted钩子中调用asyncfunc方法并在then回调中访问更新后的数据,确保了值的正确获取。

vue 异步修改data中的值不生效

今天在做vue项目的时候,由于用到了echart社区的官方图表,就小小的封装了一下,封装过后只需要传入一个数组数据就可以渲染出图表了,由于之前没有数据,我就在本地测试的时候传给了他一些默认数据,但是到后来对接接口的时候,这是数据是从后台哪里获取的,所以我需要从vue data中拿数据,然后传到函数中,问题就是出在这一步,你死活无法拿到vue data中更新后的值,你说气人不
这时会有人说,Vue是通过响应式系统修改,响应式系统会在初始化时对data进行监听,如果要修改data中的值,应该使用Vue提供的修改方法
this.$set(this.data, 'name', 'new value')
数组的话还可以这样修改
this.arr.splice(0,1,[])
不过你要知道该方法触发的时机,数据如果没有正确地绑定到模板中,那么即使使用了$set方法修改了data值,视图也不会发生变化。你可以通过在模板中使用{{}}v-bind绑定数据,这样以确保数据能正确地渲染到视图中。才能准确地触发更新
相反如果数据没有进行绑定,你会发现不管你在哪里访问data,拿到的永远是之前的值,具体可以看下面这张图

在这里插入图片描述

其实呢要解决这个问题也简单,你只需要在返回一个promise就可以了,下面是一些具体实现方法
<script>
  export default {
    data() {
      return {
        arr:[
          [0,1,2,3],
          [1,2,3,4],
          [2,3,4,5],
        ]
      }
    },
      methods: {
        asyncfunc(){
           return new Promise((resolve, reject) => { 
              setTimeout(() => {
                this.$set(this.arr,0,[0,25])
                resolve()
              }, 5000);
            })
        }
      },
      mounted () {
        this.asyncfunc().then((result) => {
          console.log(this.arr[0],'值发生改变')
        })
      },
  }
</script>
这样你就可以拿到data中更新后的值啦!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端深造中

老板别忘了支持哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值