Vue 父子组件的双向数据传递

本文详细介绍了Vue.js中如何使用v-model实现双向数据绑定,通过实例展示了自定义组件与父组件之间的数据同步和通信机制,包括@input事件、.sync修饰符的使用。
html
<div id="father">
			<p @click="change">{{bar}}</p>
			<child-comp  :message.sync="bar"  >
				
			</child-cmp>
			
		</div>
js
Vue.component("childComp",{
		props:['message'],
		template:'<input @input="$emit(\'update:message\',$event.target.value);" v-bind:value="message"> '
	})
	new Vue({
		el:'#father',
		data:{
			count:0,
			bar:'hhhhhhh'
		}

	})

**利用v-model 来双向绑定 **

html
		<div id="father">
			<p>{{loveVue}}</p>
				<base-checkbox v-model ="loveVue"></base-checkbox>
		</div>
js
Vue.component("base-checkbox",{
		model:{
			prop:'checked',
			event:'changeS'
		},
		props:{
			checked:Boolean
		},
		template:'<input type="checkbox" v-bind:checked="checked" v-on:change="$emit(\'changeS\',$event.target.checked)">'
	})
	new Vue({
		el:'#father',
		data:{
			loveVue:true,
		}
	})

.sync

html
<div id="father">
			<p >{{name}}</p>
			<show-name :value.sync="name">
				<show-name v-bind:value="name" v-on:update:value="update">
			</show-name>
		</div>

js
Vue.component("show-name",{
		props:{
			name:String
		},
		template:'<input type="text"   v-on:input="$emit(\'update:value\',$event.target.value)" >'
	})
	new Vue({
		el:'#father',
		data:{
			name:"gaojl"
		},
		methods:{
			update:function(e){
			this.name = e;
		}
		}
		

	})
### Vue.js 父子组件双向绑定实现方法 在 Vue.js 中,父子组件间的双向数据绑定是一个常见需求。通过 `props` 向下传递数据给子组件,并利用 `$emit` 将事件触发回传至父组件,可以轻松达成这一目标。 #### 方法一:使用 Props 和 $emit 实现双向绑定 父组件向子组件传递属性的同时监听来自子组件的自定义事件,在接收到更新通知时同步修改自身的状态: ```html <template> <div> <!-- 子组件接收 title 和 content 属性 --> <child-component :title="title" :content="content" @content-changed="updateContent"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { title: '父组件标题', content: '父组件内容' }; }, methods: { // 当子组件发出 content-changed 事件时调用此函数并更新本地 state updateContent(newContent) { this.content = newContent; } } }; </script> ``` 当子组件内部发生改变需要反馈到父级的时候,则应该发射一个名为 `content-changed` 的事件携带新的值作为参数[^1]。 #### 方法二:借助 v-model 自定义修饰符简化操作 对于简单的输入框或其他表单控件来说,还可以更进一步地封装成支持 `.sync` 或者直接配合 `v-model` 来完成更加简洁优雅的数据流管理方式。这种方式不仅减少了样板代码量而且提高了可读性和维护性。 ```html <!-- Parent Component --> <template> <custom-input v-model="message"></custom-input> </template> <script> // ...省略其他部分... data () { return { message: '' } } </script> ``` ```html <!-- CustomInput Component --> <template> <input type="text" :value="value" @input="$emit('input', $event.target.value)"> </template> <script> export default { props: ['value'] } </script> ``` 这种方法允许开发者像处理原生 HTML 表单元素一样对待自定义组件,从而获得更好的开发体验[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值