返回介绍

二、组件 emits 选项

发布于 2024-04-04 21:12:39 字数 1561 浏览 0 评论 0 收藏 0

emits 选项,和现有的 props 选项类似。这个选项可以用来定义一个组件可以向其父组件触发的事件。

并且, emits 选项中列出的事件不会从组件的根元素继承,也将从 $attrs property 中移除,否则将随 $attrs 绑定到组件的根节点上

emits 可以是数组或对象,从组件触发自定义事件,emits 可以是简单的数组,也可以是对象,后者允许配置事件验证。

在对象语法中,每个 property 的值可以为 null 或验证函数。验证函数将接收传递给 $emit 调用的其他参数。如果 this.$emit('foo',1) 被调用, foo 的相应验证函数将接收参数 1 。验证函数应返回布尔值,以表示事件参数是否有效。

const app = createApp({})

// 数组语法
app.component('todo-item', {
  emits: ['check'],
  created() {
  this.$emit('check')
  }
})

// 对象语法
app.component('reply-form', {
  emits: {
  // 没有验证函数
  click: null,
  // 带有验证函数
  submit: payload => {
    if (payload.email && payload.password) {
    return true
    } else {
    console.warn(`Invalid submit event payload!`)
    return false
    }
  }
  }
})

对于向其父组件透传原生事件的组件来说,这会导致有两个事件被触发:

<template>
  <button v-on:click="$emit('click', $event)">OK</button>
</template>
<script>
export default {
  emits: [] // 不声明事件
}
</script>

当一个父级组件拥有 click 事件的监听器时:

<my-button v-on:click="handleClick"></my-button>

该事件现在会被触发两次:

  • 一次来自 $emit()
  • 另一次来自应用在根元素上的原生事件监听器。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文