子组件向父组件通信主要通过自定义事件实现。
这里我记录一个小例子来帮助自己记忆。
通过点击子组件的按钮去执行父组件的函数并使用子组件传来的数据。
子组件定义如下:
"temp">const cpn={ template:'#temp', data(){ return { game:[ {id:1,name:'英雄联盟'}, {id:2,name:'地下城'}, {id:3,name:'空洞骑士'}, {id:4,name:'绝地求生'} ] } }, methods:{ } }
这里我直接将vue实例作为了父组件:
const app = new Vue({ el:'#div1', data:{ }, methods:{ }, components:{ cpn } })
由于程序简单,运行界面上只显示了几个按钮:
然后再为子组件添加函数:
itemclick(item){ // 使用$emit发射一个自定义事件,第一个参数是事件名称,第二个参数是默认传递参数 this.$emit('cpnclick',item) }
从上面的模板可以看出这个函数再按钮点击时执行。在这个函数中,使用$emit方法发射了一个事件,事件名称为第一个参数:'cpnclick',第二个参数为该事件触发时传递的默认参数。
然后,在使用组件的html代码中用v-on指令监听这个事件:
<div id="div1"> <cpn @cpnclick="Cpnclick">cpn> div>
并在父组件中添加函数Cpnclick(注意这个C大写不是之前那个cpnclick):
Cpnclick(item){ alert('接收到'+item.name) }
在监听到事件时参数item会自动接受到前面传来的默认参数
运行效果:
完整代码如下:
1 2 3 4 5 6Document 7 8 910 1113 14 15 16 17 1812 19 2021 22 23 60 61