夜猫子的知识栈 夜猫子的知识栈
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夜猫子

前端练习生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础

  • 响应式

  • 组件

  • 过渡&动画

  • 可复用性

    • Mixin混入
    • 渲染函数
    • 全局API
    • Teleport
    • 组合式API
    • 引入css样式
    • 自定义hook
    • 自定义插件
    • 自定义事件
      • 组件标签中的原生事件
      • 组件标签中的自定义事件
      • 定义自定义事件
    • 自定义指令
  • 工具

  • 规模化

  • 路由(核心)

  • 组合式

  • Vuex

  • Pinia

  • 其他

  • Vue3 源码学习记录

  • 《Vue》笔记
  • 可复用性
夜猫子
2022-04-13
目录

自定义事件

# vue自定义事件

一般都是在组价中绑定自定义事件,在原生DOM上绑定自定义事件无意义

<div @eventName="method"></div>
1

# 组件标签中的原生事件

<routerName @click.native="method"><routerName>
1

如果在组件、路由标签中使用原生事件,会失效(被解析成了自定义事件),需要在后面加上.native来使原生事件生效

原理:其实是通过native标识,给子组件的根元素绑定上了事件

# 组件标签中的自定义事件

父组件:

<template>
	<routerName @click="method"></routerName>
</template>
<script>
    methods:{
      method(value){
          alert(value)
}  
}
</script>
1
2
3
4
5
6
7
8
9
10

子组件:

需要通过$emit触发

<template>
	<button @click="$emit{`click`,'回调参数'}"></button>
</template>
<script>
</script>
1
2
3
4
5

# 定义自定义事件

可以通过 emits 选项在组件上定义发出的事件。建议定义所有发出的事件,以便更好地记录组件应该如何工作。

可对发出的事件进行验证,用来声明该组件能够触发哪些事件。

app.component('custom-form', {// 子组件
  emits: {
    // 没有验证
    click: null,

    // 验证 submit 事件,如果验证通过,发送事件;否则停止发送
    submit: ({ email, password }) => {
      if (email && password) {
        return true
      } else {
        console.warn('Invalid submit event payload!')
        return false
      }
    }
  },
  methods: {
    submitForm(email, password) {
      this.$emit('submit', { email, password })
    }
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

<script setup> 中的 defineEmits:

<script setup>
const emit1 = defineEmits(['inFocus', 'submit'])
const emit2 = defineEmits({
  submit(payload) {
    // 通过返回值为 `true` 还是为 `false` 来判断
    // 验证是否通过
  }
})
</script>
1
2
3
4
5
6
7
8
9

如果你正在搭配 TypeScript 使用 <script setup>,也可以使用纯类型标注来声明触发的事件:

<script setup lang="ts">
const emit = defineEmits<{
  (e: 'change', id: number): void
  (e: 'update', value: string): void
}>()
</script>
1
2
3
4
5
6
编辑 (opens new window)
上次更新: 2023/7/11 18:57:41
自定义插件
自定义指令

← 自定义插件 自定义指令→

最近更新
01
IoC 解决了什么痛点问题?
03-10
02
如何调试 Nest 项目
03-10
03
Provider注入对象
03-10
更多文章>
Copyright © 2019-2025 Study | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式