Vue中的$set和Vue.set方法(视图更新)

这里我定义了一个列表数据,我将通过按钮来控制列表数据。
在这里插入图片描述

比如我们修改一个数组其中的一个值,或者添加一条数据时,不管用。

<template>
  <div id="app" style="padding: 100px">
    <el-link type="primary" v-for="item in items" :key="item.id" style="margin-right: 10px">{{item.message}}</el-link>
    <el-button @click='btn2Click()'>动态赋值</el-button>
  </div>
</template>
<script>
  import Vue from 'vue'
    export default {
      name: "test",
      data() {
        return{
          items:[
            {message:"Test one",id:"1"},
            {message:"Test two",id:"2"},
            {message:"Test three",id:"3"}
          ]
        }
      },
      methods:{
        btn2Click(){
          this.items[0] = {message:"Test four",id:"10"}
          console.log(this.items)
        },
      },
    }
</script>

当我点击按钮通过JS赋值的方法,将Tset one改为 Test four时,发现控制台已经改变了,但是视图并没有更新
在这里插入图片描述
在这里插入图片描述
因此修改失败

Vue.set() 方法
调用方法:Vue.set( target, key, value )
target:要更改的数据源(可以是对象或者数组)
key:要更改的具体数据
value :重新赋的值

<template>
  <div id="app" style="padding: 100px">
    <el-link type="primary" v-for="item in items" :key="item.id" style="margin-right: 10px">{{item.message}}</el-link>
    <el-button @click='btn2Click()'>动态赋值</el-button>
  </div>
</template>
<script>
  import Vue from 'vue'
    export default {
      name: "test",
      data() {
        return{
          items:[
            {message:"Test one",id:"1"},
            {message:"Test two",id:"2"},
            {message:"Test three",id:"3"}
          ]
        }
      },
      methods:{
        btn2Click(){
          Vue.set(this.items,0,{message:"Test four",id:"10"})
          console.log(this.items)
        },
      },
    }
</script>

还是点击按钮如下图
在这里插入图片描述
在这里插入图片描述
这次控制台变化的同时,视图页面也跟着变化

总结:
在vue文档中写着如果在实例创建之后添加新的属性到实例上,它不会触发视图更新
数据发生变化视图不更新 那就要Vue.set方法来设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

姜天生i

如果本文对你有所帮助点赞就好~

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

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

打赏作者

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

抵扣说明:

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

余额充值