当前位置: 首页 > news >正文

vue传值处理:vue中父组件通过props传值给子组件,子组件表单控件使用值,子组件改变该值时如何避免报错

话不多说,直接上代码~

父组件father.vue:

<template>
	<div class="father">
		<child :txt="txt" />
	</div>
</template>

<script>
	import child from './components/child.vue'
	export default {
		name:'father',
		components:{
			child
		},
		data(){
			return {
				txt:'11111'
			}
		}
	}
</script>

子组件child.vue使用父组件传的txt值示例1 (非法)

<!--直接使用-->
<template>
	<div class="child">
		<input type="text" v-model="txt" />
	</div>
</template>
<script>
	export default{
		name:'child',
		props:['txt']
	}
</script>

这样使用页面初始化是没有问题,但是当input框输入值的时候就会报错:

image

很显然,这种方式有问题

子组件child.vue使用父组件传的txt值示例2 (非法)

<!--在计算属性computed中直接使用-->
<template>
	<div class="child">
		<input type="text" v-model="newTxt" />
	</div>
</template>
<script>
	export default{
		name:'child',
		props:['txt'],
		computed:{
		    newTxt(){
				return this.txt;
			}
		}
	}
</script>

这样使用页面初始化是没有问题,但是当input框输入值的时候就会报错:

image

很显然,这种方式还是有问题

子组件child.vue使用父组件传的txt值示例3 (推荐)

<!--利用计算属性computed中的get和set复制给新的变量-->
<template>
	<div class="child">
		<input type="text" v-model="newTxt" />
	</div>
</template>
<script>
	export default{
		name:'child',
		props:['txt'],
		computed:{
			newTxt:{
				get(){
					return this.txt;
				},
				set(val){
					this.formTxt = val;
				}	
			}
		}
	}
</script>

这种方式可行,表单提交的时候就直接使用formTxt字段

子组件child.vue使用父组件传的txt值示例4 (推荐)

<!--在生命周期中重新赋值-->
<template>
	<div class="child">
		<input type="text" v-model="newTxt" />
	</div>
</template>
<script>
	export default{
		name:'child',
		props:['txt'],
		created() {
			this.newTxt = this.txt;
		},
		data(){
			return{
				newTxt:''
			}
		}
	}
</script>

在生命周期中重新赋值可行,这种方式可以满足提交数据的时候获取到更改的值newTxt,但是这种方式并不简洁,下面介绍一种更加简洁的方式

子组件child.vue使用父组件传的txt值示例5 (推荐最佳)

<!--先定义一个变量,直接将props接受的值复制到变量上面-->
<template>
	<div class="child">
		<input type="text" v-model="newTxt" />
	</div>
</template>
<script>
	export default{
		name:'child',
		props:['txt'],
		data(){
			return{
				newTxt:this.txt
			}
		}
	}
</script>

很显然这种方式最佳,简洁还得体!

相关文章:

  • axios的二次封装:在vue中如何灵活运用axios请求,二次封装更加灵活,更多参数可配置
  • 清理C盘内存:电脑C盘飘红了,那么如何清理垃圾文件,总结几种亲测方案
  • Part05 - (图文)NSX系列之检查NSX Controller状态
  • JSON.parse转化:如何使得一个字符串类型‘false‘等于布尔类型的false(使‘1‘===1?成立的2种处理办法,与JSON.stringify的)
  • 常用工具函数推荐:前端开发常用的工具函数(拷贝、排序、防抖、去重、合并、时间处理、DOM操作...).md
  • 正则表达式校验文件路径
  • img制图技巧:给img图片添加背景颜色和背景图片,制作出新图片
  • 移动端h5页面click事件延迟300ms,出现该问题的原因分析及解决方案FastClick.js
  • ios移动端兼容:iPhone X等机型底部的安全距离样式的设置
  • js简单判断:js判断对象是否为{},js判断对象是否为null
  • Linux Pmap 命令:查看进程用了多少内存
  • HBuilder X运行uniapp之app真机调试控制台console不打印,多种原因分析解决,亲测有效
  • 开源项目推荐:推荐5款前端的开源项目,vue、uniapp、react学无止境用无止境_
  • uniapp插件开发:uniapp之slider滑动选择插件,方向支持横向和竖向,更多参数可配置化
  • 与 ConTeXt MkIV 官方文档的接驳
  • php的引用
  • JS 中的深拷贝与浅拷贝
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 2017 前端面试准备 - 收藏集 - 掘金
  • avalon2.2的VM生成过程
  • exif信息对照
  • go append函数以及写入
  • Hibernate最全面试题
  • JavaScript设计模式系列一:工厂模式
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • PHP 小技巧
  • Vue ES6 Jade Scss Webpack Gulp
  • vue数据传递--我有特殊的实现技巧
  • 百度小程序遇到的问题
  • 京东美团研发面经
  • 开源SQL-on-Hadoop系统一览
  • 前端_面试
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 1.Ext JS 建立web开发工程
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # 计算机视觉入门
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #Lua:Lua调用C++生成的DLL库
  • (C++17) optional的使用
  • (Java数据结构)ArrayList
  • (libusb) usb口自动刷新
  • (MATLAB)第五章-矩阵运算
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (接口自动化)Python3操作MySQL数据库
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (转)Linq学习笔记
  • (转)程序员疫苗:代码注入
  • (转)关于pipe()的详细解析
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)我也是一只IT小小鸟
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net mvc 获取url中controller和action