Vue3+TypeScript学习笔记(二十)

简介: 本节记录Vue3全局事件总线Mitt相关知识

Mitt是一个事件订阅/发布库,相当于Vue3中的全局事件总线。这个库需要通过npm install mitt安装
使用方法:

  1. 在main.ts中引入并调用,配置好扩展声明

main.ts

import { createApp } from 'vue'
// import './style.css'
import App from './App.vue'
import mitt from 'mitt'

const Mit = mitt()

// 拓展d.ts获取代码提示,配置错误会出现“不存在该属性”的情况
declare module 'vue' {
    export interface ComponentCustomProperties {
        $Bus: typeof Mit
    }
}

export const app = createApp(App)

// 将Mit挂载到全局对象中
app.config.globalProperties.$Bus = Mit

app.mount('#app')
  1. 在组件A中使用(注意不能直接引入app,app身上并没有Mit)

A.vue

<template></template>

<script setup lang="ts">
import { ref, reactive } from 'vue'
// 获取当前组件实例
import { getCurrentInstance } from 'vue'
const instance = getCurrentInstance()

// 获取实例身上的$Bus对象,定义事件执行回调,第一个参数是事件名,第二个是执行的方法函数
instance?.proxy?.$Bus.on('on-click', params => {
    console.log('收到了', params)
})
</script>

<style scoped></style>
  1. 在组件B中使用,方法同A相似
<template>
    <input v-model="message" type="text">
    <button @click="emit">点我向A组件传递数据</button>
</template>

<script setup lang='ts'>
import { ref,reactive } from 'vue'
// 获取当前组件实例
import { getCurrentInstance } from 'vue';
const instance = getCurrentInstance()

let message = ref<string>()
const emit = () => {
  // 获取实例身上的$Bus对象,定义触发事件回调,第一个是事件名,第二个是要传给执行方法的参数
    instance?.proxy?.$Bus.emit('on-click',message.value)
}
</script>

<style scoped>

</style>
  1. 在App.vue中引入这两个组件以挂载至页面

B.vue

<template>
    <A></A>
    <B></B>
</template>

<script setup lang='ts'>
import { ref,reactive } from 'vue'
import A from './components/A.vue';
import B from './components/B.vue';

</script>

<style scoped>

</style>

App.vue

  1. 完成效果:

image.png

相关文章
|
4天前
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
13 3
|
4天前
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
12 1
|
17天前
|
资源调度 JavaScript 前端开发
Vue3+TypeScript前端项目新纪元:揭秘高效事件总线Mitt,轻松驾驭组件间通信的艺术!
【8月更文挑战第3天】Vue3结合TypeScript强化了类型安全与组件化开发。面对大型应用中复杂的组件通信挑战,可通过引入轻量级事件发射器Mitt实现事件总线模式。Mitt易于集成,通过简单几步即可完成安装与配置:安装Mitt、创建事件总线实例、并在组件中使用`emit`与`on`方法发送及监听事件。此外,利用TypeScript的强大类型系统确保事件处理器正确无误。这种方式有助于保持代码整洁、解耦组件,同时提高应用的可维护性和扩展性。不过,在大规模项目中需谨慎使用,以防事件流过于复杂难以管理。
33 1
|
19天前
|
开发框架 前端开发 JavaScript
在基于vue-next-admin的Vue3+TypeScript前端项目中,为了使用方便全局挂载对象接口
在基于vue-next-admin的Vue3+TypeScript前端项目中,为了使用方便全局挂载对象接口
|
19天前
|
开发框架 前端开发 JavaScript
在Vue3+TypeScript 前端项目中使用事件总线Mitt
在Vue3+TypeScript 前端项目中使用事件总线Mitt
|
11天前
|
JavaScript 测试技术 API
Vue 3 与 TypeScript:最佳实践详解
Vue 3 与 TypeScript:最佳实践详解
|
17天前
|
JavaScript 前端开发 API
Vue 3+TypeScript项目实战:解锁vue-next-admin中的全局挂载对象接口,让跨组件共享变得高效而优雅!
【8月更文挑战第3天】在构建Vue 3与TypeScript及vue-next-admin框架的应用时,为提高多组件间共享数据或方法的效率和可维护性,全局挂载对象接口成为关键。本文通过问答形式介绍其必要性和实现方法:首先定义全局接口及其实现,如日期格式化工具;接着在`main.ts`中通过`app.config.globalProperties`将其挂载;最后在组件内通过Composition API的`getCurrentInstance`访问。这种方式简化了跨组件通信,增强了代码复用性和维护性。
12 0
|
JavaScript 前端开发
基于Vue2+TypeScript的项目规划搭建
最近手头的项目都已经接近尾声,时间比较宽裕,于是想着升级一下网站。上一版的网站还是我刚接触前端时设计的,使用Zepto为主要框架,代码毫无模块化思想,因为后续的功能越加越多,现在每次维护都有自杀的冲动。
1609 0
|
1天前
|
JavaScript
Vue学习之--------路由的query、params参数、路由命名(3)(2022/9/5)
这篇文章详细介绍了Vue路由中的query参数、命名路由、params参数以及props配置的使用方式,并通过实际项目案例展示了它们在开发中的应用和测试结果,同时解释了`<router-link>`的`replace`属性如何影响浏览器历史记录。
Vue学习之--------路由的query、params参数、路由命名(3)(2022/9/5)
|
1天前
|
JavaScript
Vue学习之--------VueX(2022/8/31)
这篇文章是关于VueX的基础知识介绍,涵盖了VueX中的state、mutations、getters和actions的定义和使用,以及Action提交mutation而非直接变更状态,以及mutations的同步执行特性。
Vue学习之--------VueX(2022/8/31)