前言:在开发的过程中,我们很多时候都需要用到组件之间的通信,父组件可以通过props把数据传给子组件,这是父→子的通信。同样,也有子→父的通信方式,$emit就是其中的一种。子组件可以通过$emit,让父组件监听到自定义事件。
Vue2中
使用:比如子组件使用$emit定义一个 自定义事件FuncHello
- 子组件在方法中设定一个sendByEmit方法,方法中使用$emit向父组件发出启动’FuncHello’的方法,传入的参数是data。
- 加入一个按钮,点击按钮触发sendByEmit函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <template> <button @click="sendByEmit()">按下发送$emit</button> </template>
<script> export default{ name : 'Children', props : { msg : String }, methods : { sendByEmit(){ let data = 'hello' this.$emit('FuncHello', data) } } }
</script>
|
父组件中引入子组件,通过v-on或者是@引入自定义的方法FuncHello
- 加入一个h1标签,用v-for的方法将数据中的text数组遍历出来。
- 声明一个getEmitData方法,用于接受FuncHello方法传过来的数据,对数据进行操作,这里是把数据推到text数组里面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <template> <div> <h1 v-for="(item, index) in text" :key="index"> {{ item }} </h1> <Children @FuncHello="getEmitData" ></Children> </div> </template>
<script> import Children from '@/components/Children.vue'
export default { name : 'Father', components : { Children }, data() { return{ text : ['12345'] } }, methods : { getEmitData(data){ this.text.push(data) } } }
</script>
|
效果