Vue方法——this.$set()解决什么问题

1.应用场景?

当你需要为对象添加一个新属性时,或者当你使用arr.length=0的方式来更改数组,此时数组长度发生变化,但视图并没有改变,这个时候就需要用到this.$set()这个方法了
简单来说,vue2是尤大通过重写数组方法的方式来进行数组的劫持,才能做到对数组的监听。
而对象新增key值,没有使用到方法(就有点像前面提到的arr.length=0),所以需要通过this.$set()或vue.set来更新。

2.this.$set实现什么功能,为什么要用它?

向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因为 Vue 无法探测普通的新增属性 (比如 this.myObject.newProperty = 'hi'),你会发现vue官网是vue.set,vue.set的用法,给你们插入连接,怕你们找不到😁,我们现在讲的这个this.$set()和它有什么关系呢?咱先说this.$set(),因为他们俩的区别就涉及原理问题啦。

3.怎么用它?

搞个栗子:

1.vue 中写在<template></template>标签的代码

<template>
  <div>
    <div v-for="(item, index) in setList">
      <el-input v-model="item.name"></el-input>
    </div>
    <el-button @click="changeValue" type="primary">改变值</el-button>
  </div>
</template>

2.export default{}中data数据

export default {
  name: 'demoThisSet',
  data () {
    return {
      setList: [
        { name: 'test' },
        { name: 'test1' }
      ]
    }
  },
  methods: {
    changeValue () {
      // this.setList[2] = { name: 'test2' }
      this.$set(this.setList, 2, { name: 'test2' })
      console.log('打印数据', this.setList)
    }
  }
}

3.点击按钮触发changeValue方法,

  🌹调用方法:this.$set( target, key, value )

  🌹 target:要更改的数据源(可以是对象或者数组)

  🌹 key:要更改的具体数据

  🌹 value :重新赋的值

4.在没有点击按钮的时候,界面是这样的,虽然界面没有显示出来,但是控制台已经打印出来了

  this.setList[2] = { name: 'test2' } 会导致控制台能打印出来,但界面没有显示出来

 

 

 5.当点击按钮的时候,调用this.$set方法,成功显示第三个属性,这就是整个过程啦😁

  this.$set(this.setList, 2, { name: 'test2' }) 控制台能打印出来,但界面也显示出来了,如果没有 加一个this.$forceUpdate()刷新当前页

 参考文章:

  vue中this.$set的用法 https://www.jianshu.com/p/6f28f5abee08

 

posted @ 2021-12-01 11:37  㭌(mou)七  阅读(448)  评论(0编辑  收藏  举报