自定义事件
什么是自定义事件
在封装组件时,为了让组件的使用者可以监听到组件内状态的变化,此时需要用到组件的自定义事件。
什么是自定义事件
通过 $emit 声明自定义事件
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| $emit('事件名','参数1','参数2','参数...'); 自定义父组件事件方法 调用 子组件原生dom 事件实现消息回传 Event2.vue <template> <div class="child"> <p>我是子组件2</p> <button @click="handler">点击我触发自定义事件xxx</button> <button @click="$emit('click','AK47','J20')">点击我触发自定义事件click</button> </div> </template>
<script setup lang="ts"> //利用defineEmits方法返回函数触发自定义事件 //defineEmits方法不需要引入直接使用 let $emit = defineEmits(['xxx','click']); //按钮点击回调 const handler = () => { //第一个参数:事件类型 第二个|三个|N参数即为注入数据 $emit('xxx','东风导弹','航母'); }; </script>
<style scoped> .child { width: 400px; height: 200px; background: pink; }
Event1.vue <template> <div class="son"> <p>我是子组件1</p> <button>点击我也执行</button> </div> </template>
<script setup lang="ts">
</script>
<style scoped> .son{ width: 400px; height: 200px; background: skyblue; } </style> </style>
|
父组件
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <div> <h1>事件</h1> <!-- 原生DOM事件 --> <pre @click="handler"> 大江东去浪淘尽,千古分流人物 </pre> <button @click="handler1(1,2,3,$event)">点击我传递多个参数</button> <hr> <!-- vue2框架当中:这种写法自定义事件,可以通过.native修饰符变为原生DOM事件 vue3框架下面写法其实即为原生DOM事件
vue3:原生的DOM事件不管是放在标签身上、组件标签身上都是原生DOM事件 --> <Event1 @click="handler2"></Event1> <hr> <!-- 绑定自定义事件xxx:实现子组件给父组件传递数据 --> <Event2 @xxx="handler3" @click="handler4"></Event2> </div>
<script setup lang="ts"> //引入子组件 import Event1 from './Event1.vue'; //引入子组件 import Event2 from './Event2.vue'; //事件回调--1 const handler = (event)=>{ //event即为事件对象 console.log(event); } //事件回调--2 const handler1 = (a,b,c,$event)=>{ console.log(a,b,c,$event) } //事件回调---3 const handler2 = ()=>{ console.log(123); } //事件回调---4 const handler3 = (param1,param2)=>{ console.log(param1,param2); } //事件回调--5 const handler4 = (param1,param2)=>{ console.log(param1,param2); } </script>
<style scoped> </style>
|