父子通信
这里记录下比较常用的父传子和子传父通信。
- 父传子通信
首先,我们要了解以下几点
A.在父组件的根实力data里面定义要传递的数据。如以下代码的定义的fruit
1 new Vue({ 2 el:'#app', 3 data(){ 4 return{ 5 fruit:['苹果','香蕉','草莓','葡萄'] 6 } 7 }, 8 9 })
B.在子组件身上绑定自定义属性。如以下代码的my-favorite
1 <my-component :my-favorite="fruit"></my-component>
C.子组件用props去接收父组件传过来的参数。如以下代码myFavorite
Vue.component('myComponent',{ props:['myFavorite'], template:` <div> <ul> <li v-for="item in myFavorite">{{ item }}</li> </ul> </div> ` })
完整代码如下:
1 <body> 2 <div id="app"> 3 <!-- 3.使用子组件 --> 4 <my-component :my-favorite="fruit"></my-component> 5 6 </div> 7 <script> 8 //1.定义一个全局的子组件 9 Vue.component('myComponent',{ 10 props:['myFavorite'], 11 template:` 12 <div> 13 <ul> 14 <li v-for="item in myFavorite">{{ item }}</li> 15 </ul> 16 </div> 17 ` 18 }) 19 new Vue({ 20 el:'#app', 21 data(){ 22 return{ 23 fruit:['苹果','香蕉','草莓','葡萄'] 24 } 25 }, 26 }) 27 </script> 28 </body>
最后数据渲染出来的效果:

2.子传父通信
掌握子传父通信要了解以下几点
A.在子组件身上绑定一个自定义事件。如以下代码@delete
1 <my-component @delete="resetHandle"></my-component>
B.在子组件内部添加一个点击事件,然后在点击事件里面通过`this.$emit`触发自定义事件。`this.$emit()`接收两个参数,第一个参数是要触发的自定义事件名,第二个参数起以及后面所有的参数都是要传递给父组件的参数,如以下代码
1 Vue.component('myComponent',{ 2 template:` 3 <div> 4 <button @click="handleclick">点我有惊喜</button> 5 </div> 6 `, 7 methods:{ 8 handleclick(){ 9 // 触发了自定义事件,并将666传给父组件 10 this.$emit('delete','666') 11 } 12 } 13 })
C.在父组件的根实力添加子组件身上绑定的自定义事件处理函数`resetHandle`
new Vue({ el:"#app", data:{ num:0 }, methods:{ resetHandle(num){ // 接收666过来并赋值给num this.num = num } } })
完整代码如下:
<body> <div id="app"> {{ num }} <my-component @delete="resetHandle"></my-component> </div> <script> Vue.component('myComponent',{ template:` <div> <button @click="handleclick">点我有惊喜</button> </div> `, methods:{ handleclick(){ // 触发了自定义事件,并将666传给父组件 this.$emit('delete','666') } } }) new Vue({ el:"#app", data:{ num:0 }, methods:{ resetHandle(num){ console.log(num); this.num = num } } }) </script> </body>
渲染效果:

当点击子组件后,父组件拿到参数后的效果


浙公网安备 33010602011771号