当前位置: 首页 > news >正文

vue3中emits

在 Vue 3 中,emits 是一个组件选项,用于声明组件可以触发的自定义事件。这有助于组件间的通信,特别是子组件向父组件传递数据

以下是 emits 的基本用法和示例:

1. 声明自定义事件

你可以在组件中使用 emits 选项来声明可以触发的事件

数组形式–数组形式适用于不需要进行参数验证的场景:

export default {
  emits: ['customEvent1', 'customEvent2'],
  methods: {
    triggerEvent1() {
      this.$emit('customEvent1', 'Event 1 triggered');
    },
    triggerEvent2() {
      this.$emit('customEvent2', 'Event 2 triggered');
    }
  }
};

对象形式–对象形式允许你对事件进行更详细的验证:

export default {
  emits: {
    customEvent: (payload) => {
      return typeof payload === 'string';
    }
  },
  methods: {
    triggerEvent() {
      this.$emit('customEvent', 'Valid payload');
    }
  }
};

2. 触发事件

在子组件中,使用 this.$emit 方法触发声明的事件:

<template>
  <button @click="triggerEvent">Trigger Event</button>
</template>

<script>
export default {
  emits: ['customEvent'],
  methods: {
    triggerEvent() {
      this.$emit('customEvent', 'Event triggered');
    }
  }
};
</script>

父组件监听事件 在父组件中,使用 v-on 或 @ 指令监听子组件的事件:

<template>
  <child-component @customEvent="handleEvent" />
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  methods: {
    handleEvent(message) {
      console.log(message); // 输出: 'Event triggered'
    }
  }
};
</script>

4. 使用 defineEmits(组合式 API)

组合式 API 中,可以使用 defineEmits 函数来定义事件

<template>
  <button @click="triggerEvent">Trigger Event</button>
</template>

<script setup>
import { defineEmits } from 'vue';

const emit = defineEmits(['customEvent']);
// 数组形式
const emitOther = defineEmits(['increment', 'decrement']);

// 对象形式
const emit = defineEmits({
  updateCount: (newCount) => {
    return typeof newCount === 'number';
  }
});
const triggerEvent = () => {
  emit('customEvent', 'Event triggered');
};
</script>

对象形式进行一次完整的表达

<template>
  <button @click="triggerEvent">Trigger Event</button>
</template>

<script setup>
import { ref } from 'vue';

const count = ref(0);

const emit = defineEmits({
  updateCount: (newCount) => {
    return typeof newCount === 'number';
  }
});

const triggerEvent = () => {
  count.value++;
  emit('updateCount', count.value);
};
</script>

TS的写法 在 TypeScript 中,你可以使用类型声明来定义事件参数的类型:

<script setup lang="ts">
const emit = defineEmits<{
  (e: 'change', id: number): void;
  (e: 'update', value: string): void;
}>();

const triggerChange = (id: number) => {
  emit('change', id);
};

const triggerUpdate = (value: string) => {
  emit('update', value);
};
</script>

注意事项

  • 事件验证:在对象形式中,验证函数返回 false 时,事件将不会被触发 。
  • 原生事件:在 Vue 3 中,可以直接在组件上监听原生事件,无需使用 .native 修饰符 。

相关文章:

  • 【预测】-双注意LSTM自动编码器记录
  • 职坐标机器学习编程实战:调试优化与自动化测试精要
  • 【C语言】指针篇
  • Python | 机器学习中最常用的超参数及使用示例
  • window系统中的start命令详解
  • SSM架构 +Nginx+FFmpeg实现rtsp流转hls流,在前端html上实现视频播放
  • RSA-OAEP填充方案与定时攻击防护
  • 人工智能之数学基础:对线性代数中逆矩阵的思考?
  • springboot011基于springboot的课程作业管理系统(源码+包运行+LW+技术指导)
  • Android中AIDL和HIDL的区别
  • 智慧校园总体方案
  • React Native国际化实践(react-i18next)
  • Centos的ElasticSearch安装教程
  • 退化环境定位(四):基于强度的感知定位方法
  • 云计算VS网络安全,应该怎么选?
  • hooks useModule自定义hooks (二次封装AgGridReact ag-table)自定义表头,自定义表头搜索
  • 浪涌测试方法与保护电路
  • Halcon 算子 一维码检测识别、项目案例
  • 任务10:三层交换机配置
  • 从零开始实现大语言模型(十四):高阶训练技巧
  • 做一手楼房的网站/廊坊seo网络推广
  • wordpress极简中文主题/星沙网站优化seo
  • 网站自然排名这么做/做关键词推广
  • 2019一个网站开发要多少钱/来宾网站seo
  • 自己做图片网站/网页设计与网站开发
  • 广东网站建设建站模板/百度一下 你就知道官网