-
概述
假设需要父组件传递数据至子组件,且子组件数据修改时需将父组件的数据同步修改,有如下两种修改方式。
- 通过自定义v-model方式实现
- 将父组件数据通过props传入至子组件;
- 子组件内创建变量复制props数据;
- 通过v-bind将子组件的变量绑定至子组件的value上;
- 绑定@input时间函数
a. 将输入框的数据幅值至子组件数据上;
b. 通过$emit()函数给父组件发送事件; - 父组件监听子组件触发的事件,并获取数据幅值至父组件数据。
- 通过v-model方法配合watch方式实现
- 将父组件数据通过props传入至子组件;
- 子组件内创建变量复制props数据;
- 通过v-model将子组件的变量双向绑定至输入框;
- 通过watch方法监听子组件数据
a. 通过$emit()函数给父组件发送事件; - 父组件监听子组件触发的事件,并获取数据幅值至父组件数据。
-
自定义v-model方法
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Vue父子件数据传递(自定义v-model方式)</title> </head> <body> <div id="app"> <cmp1 :father_val1="val1" :father_val2="val2" @change_val1="change_val1" @change_val2="change_val2" ></cmp1> <h2>father_val1: {{ val1 }}</h2> <h2>father_val2: {{ val2 }}</h2> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> Vue.component('cmp1',{ template:` <div> <input type="text" :value="child_val1" @input="change_val1"> <input type="text" :value="child_val2" @input="change_val2"> <h2>child_val1: {{child_val1}}</h2> <h2>child_val2: {{child_val2}}</h2> </div> `, data(){ return { child_val1: this.father_val1, child_val2: this.father_val2 } }, props:{ father_val1: '', father_val2: '' }, methods:{ change_val1(event){ this.child_val1 = event.target.value this.$emit('change_val1', this.child_val1) }, change_val2(event){ this.child_val2 = event.target.value this.$emit('change_val2', this.child_val2) } } }) let app = new Vue({ data:{ val1: 'val1', val2: 'val2', }, methods: { change_val1(val){ this.val1 = val }, change_val2(val){ this.val2 = val } } }).$mount('#app') </script> </body> </html>
-
v-model配合watch方法
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Vue父子件数据传递(v-model配合watch方式)</title> </head> <body> <div id="app"> <cmp1 :father_val1="val1" :father_val2="val2" @change_val1="change_val1" @change_val2="change_val2" ></cmp1> <h2>father_val1: {{ val1 }}</h2> <h2>father_val2: {{ val2 }}</h2> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> Vue.component('cmp1',{ template:` <div> <input type="text" value="child_val1" v-model="child_val1"> <input type="text" value="child_val2" v-model="child_val2"> <h2>child_val1: {{child_val1}}</h2> <h2>child_val2: {{child_val2}}</h2> </div> `, data(){ return { child_val1: this.father_val1, child_val2: this.father_val2 } }, props:{ father_val1: '', father_val2: '' }, watch:{ child_val1(newVal){ this.$emit('change_val1', this.child_val1) }, child_val2(newVal){ this.$emit('change_val2', this.child_val2) } } }) let app = new Vue({ data:{ val1: 'val1', val2: 'val2', }, methods: { change_val1(val){ this.val1 = val }, change_val2(val){ this.val2 = val } } }).$mount('#app') </script> </body> </html>
5. Vue 父子件数据传递
原创
©著作权归作者所有:来自51CTO博客作者可乐不可的原创作品,请联系作者获取转载授权,否则将追究法律责任
Vue 父子件数据传递

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【Vue学习总结】14.Vue父子组件数据传递
接上篇《13.使用Axios、fetchJsonp请求数据》上一篇我们主要讲解了如何使用使用挂载的其它组件就是它的子组件,即父子组件就是
vue props 父子组件传值 实例名 Vue -
ThreadLocal父子线程数据传递方案
据说这是80%的人都不知道的知识点。
子线程 线程池 ide 赋值 缓存 -
SpringBoot异步线程,父子线程数据传递的5种方案
五种不同的方案解决父子线程之间数据传递问题,总有一种方案适合你
线程池 主线程 子线程 springboot