当前位置: 首页 > Web前端 > vue.js

在vue3中使用emits

时间:2023-03-31 17:38:54 vue.js

emits:list声明从父组件继承的事件$emit:抛出事件,通知父组件在子组件中处理,在父组件中通过$emit()触发事件,通过v监听子组件事件-onchild组件中:exportdefault{name:"MyXgPlayer",//声明从父组件继承的事件:可以是简单的数组或对象(带校验功能)emits:['just-one-player'],props:{domId:String,previewVideoUrl:String,},setup(props,context){//获取当前实例(包括从父组件传来的props数据,实例方法($watch,$emit,$forceUpdate,$nextTick,definedglobal$addHost//$alert,$message,$messageBox,$store,$router,$refs...)包含在vueconst{proxy}=getCurrentInstance()letplayer=ref(null)onMounted(()=>{//newdataplayer.value=newPlayer({id:props.domId,url:props.previewVideoUrl,});//监听播放事件player.value.on('play',()=>{console.log("start$emit")//将事件抛给父组件proxy.$emit("just-one-player",props.domId,player)})})},}父组件import{ref}from"vue"setup(props,context){constxgplayers=ref({})constjustOnePlayer=(domId,player)=>{console.log("receive$emit")for(letitem_keyinstate.xgplayers){if(item_key!==domId){state.xgplayers[item_key].pause()}}state.xgplayers[domId]=player}return{xgplayers,justOnePlayer}}}点击子组件中的播放,打印的logstart$emitreceive$emit