首页 > 其他分享 >Vue进阶(九十七):对象动态添加属性和值

Vue进阶(九十七):对象动态添加属性和值

时间:2023-05-20 12:32:28浏览次数:41  
标签:九十七 Vue 进阶 items set Test message 属性

(文章目录)

一、背景

Vue规定不允许直接修改props或者data属性,必须使用Vue.set方法。

Vue.set方法用来修改对象属性。如果要增加属性所属对象是响应式的,该方法可以确保属性被创建后也是响应式的,同时触发视图更新。

二、基础知识

在这里插入图片描述 注:修改的对象必须为响应式对象,且操作响应式对象的属性也必须是响应式的,能够触发视图更新。否则浏览器JS将无法解析,从而报错。

三、示例代码

目的:定义一个列表数据,通过2个不同的按钮来控制列表数据。

// 1. 首先在页面导入Vuejs文件库
import Vue from 'vue'
<div id="app2">
    <p v-for="item in items" :key="item.id">
        {{item.message}}
    </p>
    <button class="btn" @click="btn2Click()">动态赋值</button><br/>    
    <button class="btn" @click="btn3Click()">为data新增属性</button>
</div>
<script>
export default {
  data () {
      items:[
          {message:"Test one",id:"1"},
          {message:"Test two",id:"2"},
          {message:"Test three",id:"3"}
      ]
  },
  methods:{
      btn2Click:function(){
          Vue.set(this.items,0,{message:"Change Test",id:'10'})
      },
      btn3Click:function(){
          var itemLen=this.items.length;
          Vue.set(this.items,itemLen,{message:"Test add attr",id:itemLen});
      }
  }
});
</script>

在这里插入图片描述 点击第一个按钮后,运行methods中的btn2Clcick方法,将Test one更改为Change Test。 在这里插入图片描述 值得注意的是:当写惯了JS之后,有可能我们会想改数组中某个下标中的数据,直接this.items[XX]就改了,如:

btn2Click:function(){
  this.items[0]={message:"Change Test",id:'10'}
}

进入控制台一探究竟: 在这里插入图片描述 这种赋值方式,是Vue明确禁止的!由于 JavaScript 限制,Vue 不能检测出数据改变(脏数据),所以当我们需要动态改变数据的时候,Vue.set()完全可以满足我们的需求。

点击【为data新增属性】按钮,查看console: 在这里插入图片描述 可以看出,Vue.set()不仅能修改对象数据属性,还能添加对象数据属性,弥补了Vue数组方法的不足。

四、拓展阅读

标签:九十七,Vue,进阶,items,set,Test,message,属性
From: https://blog.51cto.com/shq5785/6317431

相关文章

  • y总算法基础课+算法提高课+算法进阶课超全模板
    y总超全算法模板y总模板自取喜欢的可以点个赞支持一下^-^模板展示......
  • 【vue】div标签和template标签使用区别
       ......
  • ruoyi-vue接入钉钉,作为h5微应用
    ruoyi-vue接入钉钉,作为h5微应用https://blog.csdn.net/jiaodacailei/article/details/1247099141.安装依赖在ruoyi-ui目录,npm安装依赖:npminstalldingtalk-jsapi--save2.定义全局钉钉企业IDruoyi-ui/.env.developmentruoyi-ui/.env.productionruoyi-ui/.env.staging#......
  • java基于springboot+vue的漫画网站管理系统,附源码+数据库+lw文档+PPT,适合毕业设计、课
    1、项目介绍考虑到实际生活中在漫画网站方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分。(a)管理员;管理员使用本系统涉到的功能主要有:首页、个人中心、用户管理、漫画分类管理、漫画投稿管理、分类管理、排行榜管理、交流论坛、系统管理等功能......
  • abp框架Excel导出——基于vue
    @@abp到处excel https://blog.51cto.com/u_15162069/2747885https://www.cnblogs.com/JerryMouseLi/p/13399027.html abp框架Excel导出——基于vue 目录abp框架Excel导出——基于vue1.技术栈1.1前端采用vue,官方提供1.2后台是abp——aspnetboilerplate2.E......
  • Java编程进阶:掌握这五个高级特性让编码更得心应手
    当今,在软件开发中最流行和使用最广泛的语言之一是Java。Java不仅是一种面向对象的编程语言,还可以用于Web开发、移动应用程序编程、云计算和大数据处理。如果你是一个初学者,或者是想要进一步了解Java编程的高级特性,那么这篇文章会帮助你更好地了解Java编程。一、使用lambda表达式在J......
  • vue3+vant3封装省市区组件
    因为后台返回的数据格式和vant不一致,所以自己遍历循环得到自己想到的格式。省市区的接口并不是一个以children格式,一次性全部获取,而是选择市的时候需要得到省的id,一层一层请求接口才能得到省市区。 父组件:1<selectArea2@addressOnFinish="onChangeArea"3......
  • SpringBoot实现WebSocket发送接收消息 + Vue实现SocketJs接收发送消息
    SpringBoot实现WebSocket发送接收消息+Vue实现SocketJs接收发送消息参考:1、https://www.mchweb.net/index.php/dev/887.html2、https://itonline.blog.csdn.net/article/details/81221103?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2......
  • 美团前端vue面试题
    CompositionAPI与OptionsAPI有什么不同分析Vue3最重要更新之一就是CompositionAPI,它具有一些列优点,其中不少是针对OptionsAPI暴露的一些问题量身打造。是Vue3推荐的写法,因此掌握好CompositionAPI应用对掌握好Vue3至关重要WhatisCompositionAPI?(opensnewwindow)......
  • vue组件通信方式有哪些?
    vue组件通信方式一、props(父向子传值----自定义属性)/$emit(子向父传值-----自定义事件)父组件通过props的方式向子组件传递数据,而通过$emit子组件可以向父组件通信。1.父组件向子组件传值(props)下面通过一个例子说明父组件如何向子组件传递数据:在子组件article.vue中......