这是官方的文字介绍。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用法内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

vue3.x中emits的基本用法实例的更多相关文章

  1. vue3.0响应式函数原理详细

    这篇文章主要介绍了vue3.0响应式函数原理,Vue3的响应式系统可以监听动态添加的属性还可以监听属性的删除操作,以及数组的索引以及length属性的修改操作。另外Vue3的响应式系统还可以作为模块单独使用。下面更多介绍,需要的小伙伴可以才可以参考一下

  2. vue3.0安装Element ui及矢量图使用方式

    这篇文章主要介绍了vue3.0安装Element ui及矢量图使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. vue3.0在子组件中触发的父组件函数方式

    这篇文章主要介绍了vue3.0在子组件中触发的父组件函数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  4. vue3.x中emits的基本用法实例

    emits是Vue3新增的选项,emits主要作用在子组件中,用于接收在父组件中绑定的方法,这篇文章主要给大家介绍了关于vue3.x中emits的基本用法,需要的朋友可以参考下

  5. vue3.0实践之写tsx语法实例

    很久不写博客了,最近在使用ts和tsx开发vue类项目,网上资料比较少,顺便记录一下方便同样开发的人互相学习共同进步,下面这篇文章主要给大家介绍了关于vue3.0实践之写tsx语法的相关资料,需要的朋友可以参考下

  6. vue3.0中sass全局的使用过程

    这篇文章主要介绍了vue3.0中sass全局的使用过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Vue版本vue2.9.6升级到vue3.0的详细步骤

    vue版本升级相信大家应该都遇到过,下面这篇文章主要给大家介绍了关于Vue版本vue2.9.6升级到vue3.0的详细步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下

  8. vue3.0中setup中异步转同步的实现

    这篇文章主要介绍了vue3.0中setup中异步转同步的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  9. Vue3.0版本强势升级点特性详解

    这篇文章主要介绍了Vue3.0版本强势升级点特性详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>

  10. vue3.0项目快速搭建的完整步骤记录

    这篇文章主要给大家介绍了关于vue3.0项目快速搭建的相关资料,本文通过图文以及实例代码介绍的非常详细,对大家学习或者使用vue3.0具有一定的参考学习价值,需要的朋友可以参考下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部