相比于 vue 2.x ,在自定义事件时 vue 3.x 提供一个 emits 选项,和现有的 props 选项类似。这个选项可以用来定义一个组件可以向其父组件触发的事件。参考 >> 官方说明

1. 自定义事件概述


在封装组件时,为了让组件的使用者可以 监听到组件内状态的变化,此时需要用到组件的 自定义事件

2. 自定义事件 3 个使用步骤


在封装组件时:

  • 声明 自定义事件
  • 触发 自定义事件

在使用组件时:

  • 监听 自定义事件

>> 声明自定义事件

开发者为自定义组件封装的 自定义事件,必须事先在 emits 节点中声明:

<!-- 子组件 Count -->
<script>
export default {
  emits: ['numchange'],
}
</script>

>> 触发自定义事件

emits 节点下声明的自定义事件,可以通过 this.$emit('自定义事件的名称') 方法进行触发。

<!-- 子组件 Count -->
<template>
  <h3>Count 子组件 --- {{ num }}</h3>
  <button type="button" class="btn btn-danger" @click="add">+1</button>
</template>

<script>
export default {
  props: ['num'],
  emits: ['numchange'],
  methods: {
    add() {
      this.$emit('numchange', this.num + 1)
    }
  }
}
</script>

>> 监听自定义事件

在使用自定义的组件时,可以通过 v-on 的形式 监听自定义事件

<!-- 父组件 App -->
<template>
  <h3>App 根组件 --- {{ count }}</h3>
  <button type="button" class="btn btn-primary" @click="count += 1">+1</button>
  <count :num="count" @numchange="getNum"></count>
</template>

<script>
import Count from './Count.vue'
export default {
  data() {
    return {
      count: 0
    }
  },
  methods: {
    getNum(num) {
      this.count = num
    }
  },
  components: {
    Count
  }
}
</script>

实现效果:
请添加图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐