这是官方的文字介绍。emits重要用于组件之间的通信,触发自定义事件,传递参数。
下面演示一个子组件把事件传递到父组件,组件间通信的例子。
<template>
<teleport to="#modal">
<div id="center" v-if="isOpen">
<h2>
<slot>this is a modal</slot>
</h2>
<button @click="clickButton">close</button>
</div>
</teleport>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({
props: {
isOpen: Boolean,
},
emits: {
'close-modal': null,
},
setup(props, context) {
const clickButton = () => {
context.emit('close-modal');
};
return {
clickButton,
};
},
});
</script>
<style scoped>
#center {
width: 200px;
height: 200px;
border: 2px solid black;
background: white;
position: fixed;
left: 50%;
top: 50%;
margin-left: -100px;
margin-top: -100px;
}
</style>
isOpen用来表示Modal的显示与隐藏,点击按钮,触发clickButton函数,父组件调用,触发自定义事件close-modal,而close-modal在父组件中绑定了onModalClose函数,实现了对Modal的隐藏。
<template>
<div id="main">
<modal :isOpen="modalIsOpen" @close-modal="onModalClose">my modal</modal>
<button @click="onModalOpen">Open Modal</button>
</div>
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
import Modal from './components/Modal.vue';
export default defineComponent({
components: { Modal },
name: 'App',
setup(){
const modalIsOpen = ref(false)
const onModalOpen = ()=>{
modalIsOpen.value = true
}
const onModalClose = ()=>{
modalIsOpen.value = false
}
return{
onModalOpen,
onModalClose,
modalIsOpen
}
}
});
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
button {
font-size: 2rem;
}
</style>
emits的文档
附:vue3自定义组件中的emits使用介绍
<template>
<!-- teleport的使用 to属性渲染到id为 teleport-test 的元素身上 在index.html中-->
<div id="center" v-if="isOpen">
<slot>插槽</slot>
<button @click="buttonClick">关闭模态框</button>
</div>
</template>
<script lang="ts">
import { defineComponent } from "vue";
export default defineComponent({
props:{
isOpen: {
type: Boolean,
required: true
},
},
// emits 写自定义事件 作用 比较清晰知道该组件有那些自定义事件
emits: {
// 无需验证写法
'close-model': null,
// 这种写法 自定义函数 可以在运行时验证参数是否正确
'close-modals': (payload: any) => {
return payload.type === 'close'
}
},
setup(props,context) {
const buttonClick = () => {
context.emit('close-model')
}
// 这种写法来校验
context.emit('close-modals',{
// 如果验证失败会有一个警告
type: 'close'
// type: 'sss'
})
return {
buttonClick
}
}
})
</script>
<style>
#center{
width: 600px;
height: 300px;
border: 1px solid #999;
background-color: #fff;
position: fixed;
left: 50%;
top: 50%;
margin-left: -300px;
margin-top: -150px;
}
</style>
总结
到此这篇关于vue3.x中emits基本用法的文章就介绍到这了,更多相关vue3.x中emits用法内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!