将父组件传入子组件的数据,子组件更改后传回父组件,而不会影响单向数据流
很多情况下,会将父组件的输入传到子组件,又子组件更改后再传回父组件,比如更改用户信息时,封装组件时。
我这里是将formData的数据传入封装好的form组件中
form组件接收props:formData
再将接收到的数据保存在本组件的data() {return {newFormData}}
中,直接在data(){return{} }
中是拿不到props中的数据的
直接在create周期函数中
created() {
this.newFormData = formData
}
这样也是不行的,要通过下面的方式才能拿到props中父组件传过来的数据
props: {
formData: {
type: Object,
defalut: () => ({})
}
},
data() {
return {
newFormData: {}
}
},
created() {
this.init()
},
methods: {
init() {
this.newFormData = this.formData
}
}
如果直接使用props中的formData就会违背了单向数据流的原则,通过这个方式更改数据,再通过emit
将数据传回父组件就不会违背单项数据流的原则
实现双向绑定,不违背单向数据流
更便捷的方式就是使用v-model这样就可以不用在父组件中定义一个函数接收子组件emit
发送的方法了
父组件
<div class="userContainer">
<base-form
:formItems='formItems'
v-model='formData'
:labelWidth='labelWidth'
>
<template v-slot:header>
<div>这是header插槽</div>
</template>
<template #footer>
<el-button type="primary" size="mini" @click="resetHandle">重置</el-button>
<el-button type="primary" size="mini" @click="searchClick">搜索</el-button>
</template>
</base-form>
</div>
子组件
props: {
modelValue: {
type: Object,
defalut: () => ({})
}
},
data() {
return {
formData: {}
}
},
created() {
// this.init()
},
//watch的使用,当formData发生改变,将新的值发送给父组件,从而改变外面formData的值,它的只改变从而处理它改变后的操作
watch: {
formData: {
handler(newValue) {
this.$emit('update:modelValue', newValue)
},
deep: true
}
},
//computed的使用,如果父组件通过v-model绑定给子组件的值modelValue发生改变,则会引起computed中fomrData的就算,将modelValue的值返回给formData,
// formData依赖的值发生改变,从而改变formData的值,会使用return来改变值
computed: {
formData() {
return this.modelValue
}
},
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了