有这样一个需求,用户可以增加多个输入框可以编辑:

 
 

实现的思路很简单,点击增加的时候,往一个数组里面push一条数据即可:

<template>
<div>
<div v-for="(item,k) in prodForm.seqNos" :key="k">
<input type="text" v-model="item.seqNo" />
</div> <button @click="add">增加</button> </div>
</template> <script>
export default {
name: "addInput",
mounted(){
this.prodForm = this.basicInfo //初始化
this.prodForm.seqNos = [] //因basicInfo没有seqNos,因此重新添加
console.log(this.prodForm)
},
data(){ return {
prodForm:{
id:'',
seqNos:[], },
basicInfo:{
id:1
}
}
},
methods:{
add(){
this.prodForm.seqNos.push({seqNo:''})
}
}, }
</script> <style scoped>
.btn{
width:100px;
margin:10px;
}
</style>

在mounted有一个初始化赋值操作,而basicInfo里面并没有seqNos这个数组,当赋值完成后,我需要重新添加回来,这样就有问题了,你点击增加的按钮无法生效,为啥呢?
根据官方文档定义:
如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。
也就是说,默认vue会遍历data里面的所有属性,并使用Object.defineProperty把这些属性全部转为 getter/setter。
我们通过打印prodForm变量,发现seqNos这个数组并未增加getter和setter,也就是这个数组并没被监听起来:

 
 

怎么办呢?$set就派上用场了:

Vue.$set(object, key, value)

我们将代码改造一下:

<template>
<div>
<div v-for="(item,k) in prodForm.seqNos" :key="k">
<input type="text" v-model="item.seqNo" />
</div> <button @click="add">增加</button> </div>
</template> <script>
export default {
name: "addInput",
mounted(){
this.prodForm = this.basicInfo //初始化
//this.prodForm.seqNos = [] //因basicInfo没有seqNos,因此重新添加 this.$set(this.prodForm,'seqNos',[])
console.log(this.prodForm)
},
data(){ return {
prodForm:{
id:'',
seqNos:[], },
basicInfo:{
id:1
}
}
},
methods:{
add(){
this.prodForm.seqNos.push({seqNo:''})
}
}, }
</script> <style scoped>
.btn{
width:100px;
margin:10px;
}
</style>

这时再打印prodForm变量,发现seqNos数组已经添加了getter和setter,按钮也生效了:

 
 

Vue.$set的使用场景的更多相关文章

  1. Web端主流框架,jquery、angular、react、vue

    不得不说,前端技术发展非常迅速,时不多久就有一个新的东西冒出来,并且迅速膨胀发展,让旁观者眼花缭乱,让开发者目眩神迷,但总体上来说,这波互联网大浪潮带动了前端技术的大发展,给曾经那些苦苦挣扎于DOM操 ...

  2. 拨开迷雾,找回自我:DDD 应对具体业务场景,Domain Model 到底如何设计?

    写在前面 除了博文内容之外,和 netfocus 兄的讨论,也可以让你学到很多(至少我是这样),不要错过哦. 阅读目录: 迷雾森林 找回自我 开源地址 后记 毫无疑问,领域驱动设计的核心是领域模型,领 ...

  3. [NodeJS] 优缺点及适用场景讨论

    概述: NodeJS宣称其目标是“旨在提供一种简单的构建可伸缩网络程序的方法”,那么它的出现是为了解决什么问题呢,它有什么优缺点以及它适用于什么场景呢? 本文就个人使用经验对这些问题进行探讨. 一. ...

  4. Asp.Net MVC中使用StreamReader读取“Post body”之应用场景。

    场景:有三个市场(Global.China.USA),对前台传过来的数据有些验证需要细化到每个市场去完成. 所以就出现了基类(Global)和派生类(China.USA) 定义基类(Global)Pe ...

  5. Java学习之反射机制及应用场景

    前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...

  6. Android线程管理之ThreadLocal理解及应用场景

    前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...

  7. MVC常遇见的几个场景代码分享

    本次主要分享几个场景的处理代码,有更好处理方式多多交流,相互促进进步:代码由来主要是这几天使用前端Ace框架做后台管理系统,这Ace是H5框架里面的控件效果挺多的,做兼容也很好,有点遗憾是控件效果基本 ...

  8. RabbitMq应用一的补充(RabbitMQ的应用场景)

    直接进入正题. 一.异步处理 场景:发送手机验证码,邮件 传统古老处理方式如下图 这个流程,全部在主线程完成,注册->入库->发送邮件->发送短信,由于都在主线程,所以要等待每一步完 ...

  9. javascript之闭包理解以及应用场景

    半个月没写博文了,最近一直在弄小程序,感觉也没啥好写的. 之前读了js权威指南,也写了篇博文,但是实话实说当初看闭包确实还是一头雾水.现在时隔一个多月(当然这一段时间还是一直有在看闭包的相关知识)理解 ...

  10. TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

    TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...

随机推荐

  1. Python编程基础(一)编程语言是什么?编译型语言和解释型语言的区别|Python是什么?

    编程语言是什么? 其实,程序指的就是一系列指令,用来告诉计算机做什么,而编写程序的关键在于,我们需要用计算机可以理解的语言来提供这些指令. 虽然借助 Siri(Apple).Google Now(An ...

  2. 003_go语言中的变量

    代码演示: package main import "fmt" func main() { var a = "initial" fmt.Println(a) v ...

  3. Nginx MogileFS 配置

    配置好MogileFS, 见mogilefs的安装与配置随笔 下载nginx.1.10.3.tar.gz, nginx_mogilefs_module.1.0.4.tar.gz 编译安装 将连个tar ...

  4. 线程通讯wait&notify

    目录 相关概念 生产者&消费者模型 相关概念 锁:解决线程间冲突的问题 wait&notify:解决线程间协作的问题 wait和sleep的区别 wait期间对象锁是释放的,而slee ...

  5. dom4j解析xml时报出文件提前结束

    在写javaweb小项目的时候,用dom4j解析xml报出如下错误: org.dom4j.DocumentException:Error    .......    Nested exception: ...

  6. java 的API及Object类

    一 Java的API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类 ...

  7. 2020-05-11:redis 10G 内存开一个实例 和redis 1G内存开10个实例有什么区别

    福哥答案2020-05-11: 此答案不完善,仅供参考.开10个实例相对更占资源,在多核下能充分利用资源.

  8. 靶机练习 - ATT&CK红队实战靶场 - 1. 环境搭建和漏洞利用

    最近某个公众号介绍了网上的一套环境,这个环境是多个Windows靶机组成的,涉及到内网渗透,正好Windows和内网渗透一直没怎么接触过,所以拿来学习下. 下载地址:http://vulnstack. ...

  9. NumPy速查笔记(持续更新中)

    目录 1 总览 2 ndarray 3 常用API 3.1 创建ndarray (1)将Python类似数组的对象转化成Numpy数组 (2)numpy内置的数组创建 (3)从磁盘中读取标准格式或者自 ...

  10. windows下mongoDB的下载和安装

    1.进入mongoDB官网,官网地址:https://www.mongodb.com 2.  点击Try free按钮,进入下载页面 3.点击download进行下载:下载完成如下图: 4.点击下载的 ...