Vue 中给 data 中的对象属性添加一个新的属性时会发生什么?如何解决?

javascript 复制代码
<template> 
   <div>
      <ul>
         <li v-for="value in obj" :key="value"> {{value}} </li> 
      </ul> 
      <button @click="addObjB">添加 obj.b</button> 
   </div>
</template>

<script>
    export default { 
       data () { 
          return { 
              obj: { 
                  a: 'obj.a' 
              } 
          } 
       },
       methods: { 
          addObjB () { 
              this.obj.b = 'obj.b' 
              console.log(this.obj) 
          } 
      }
   }
</script>

点击 button 会发现,obj.b 已经成功添加,但是视图并未刷新。这是因为在Vue实例创建时,obj.b并未声明,因此就没有被Vue转换为响应式的属性,自然就不会触发视图的更新,这时就需要使用Vue的全局 api $set():

javascript 复制代码
addObjB () (
   this.$set(this.obj, 'b', 'obj.b')
   console.log(this.obj)
}

$set()方法相当于手动的去把obj.b处理成一个响应式的属性,此时视图也会跟着改变了。

相关推荐
yuqifang1 分钟前
DevEco Studio工具在打hap包时,Product选项(default,release)和 Build Mode(default,release)区别
前端
朝与暮2 分钟前
《深入浅出编译原理 -- 编译原理总述(一)》
前端·编译原理·编译器
灰太狼大王灬4 分钟前
Chrome 浏览器扩展图片 提取大师
前端·chrome
Strawberry_rabbit7 分钟前
程序员工作必需之公网和私网
前端·网络协议
昔人'10 分钟前
css`text-underline-offset` 为文本下划线设置偏移量
前端·css
旺仔牛仔QQ糖10 分钟前
防抖(或节流)自定义传参
前端
莎莎小公举14 分钟前
AI 应用中 Markdown 流式渲染图片闪动问题
前端
天蓝色的鱼鱼15 分钟前
Next.js的水合:静默的页面“唤醒”术
前端·react.js·next.js
莎莎小公举16 分钟前
AI项目中对话模块实现及markdown适配
前端
irises18 分钟前
前端国际化方案结构设计
前端