首页 > 其他分享 >Vue3(Mitt)

Vue3(Mitt)

时间:2022-11-17 02:22:05浏览次数:70  
标签:vue const Bus Mitt instance num proxy Vue3

 

Vue3 + vite + Ts + pinia + 实战 + 源码 +全栈_哔哩哔哩_bilibili 视频教程

在vue3中$on,$off 和 $once 实例方法已被移除,组件实例不再实现事件触发接口,因此大家熟悉的EventBus便无法使用了。然而我们习惯了使用EventBus,对于这种情况我们可以使用Mitt库(其实就是我们视频中讲的发布订阅模式的设计)

1.安装

npm install mitt -S

 

2.main.ts 初始化

全局总线,vue 入口文件 main.js 中挂载全局属性

import { createApp } from 'vue'
import App from './App.vue'
import mitt from 'mitt'
 
const Mit = mitt()
 
//TypeScript注册
// 由于必须要拓展ComponentCustomProperties类型才能获得类型提示
declare module "vue" {
    export interface ComponentCustomProperties {
        $Bus: typeof Mit
    }
}
 
const app = createApp(App)
 
//Vue3挂载全局API
app.config.globalProperties.$Bus = Mit
 
app.mount('#app')

 

3.使用方法

通过emit派发, on 方法添加事件,off 方法移除,clear 清空所有

A组件派发(emit)

<template>
    <div>
        <h1>我是A</h1>
        <button @click="emit1">emit1</button>
        <button @click="emit2">emit2</button>
    </div>
</template>
 
<script setup lang='ts'>
import { getCurrentInstance } from 'vue'
const instance = getCurrentInstance();
const emit1 = () => {
    instance?.proxy?.$Bus.emit('on-num', 100)
}
const emit2 = () => {
    instance?.proxy?.$Bus.emit('*****', 500)
}
</script>
 
<style>
</style>

 

B组件监听(on)

<template>
    <div>
        <h1>我是B</h1>
    </div>
</template>
 
<script setup lang='ts'>
import { getCurrentInstance } from 'vue'
const instance = getCurrentInstance()
instance?.proxy?.$Bus.on('on-num', (num) => {
    console.log(num,'===========>B')
})
</script>
 

 

监听所有事件( on("*") )

instance?.proxy?.$Bus.on('*',(type,num)=>{
    console.log(type,num,'===========>B')
})

 

移除监听事件(off)

const Fn = (num: any) => {
    console.log(num, '===========>B')
}
instance?.proxy?.$Bus.on('on-num',Fn)//listen
instance?.proxy?.$Bus.off('on-num',Fn)//unListen

 

清空所有监听(clear)

instance?.proxy?.$Bus.all.clear() 

 

参考地址

 

标签:vue,const,Bus,Mitt,instance,num,proxy,Vue3
From: https://www.cnblogs.com/miangao/p/16898156.html

相关文章

  • 手动实现 vue3 [ reactive, computed, watch ]
    一、vue.js1importreactivefrom"./reactive";2importWatcherfrom"./Watcher";3importcomputedfrom"./computed";4importwatchfrom"./watch";56ex......
  • VUE3 elment-ui el-tabel遍历实现表格的自定义列【KEY值为列名】
    <template><div><el-table:data="resultTable"borderref="multipleTable"tooltip-effect="light"size="mini"><el-table-columntype="i......
  • Vue3的setup在el-tab中动态加载组件
    公司某项目需求在页面显示的组件是根据角色变化而变化的,在这个项目中我使用了elementplus的el-tabs来动态的显示这些组件,如下图所示数据内容大概是这样的在未使用setup......
  • vue3+Ts+Vite+ElementPlus+Axios+Router+Pinia 创建过程以及会出的错误
    第一步保证Node.Js版本为12.0以上打开cmd命令输入node-v看版本目前是最新用18.0就行,下载地址:[https://nodejs.org/en/](https://nodejs.org/en/)安装node.js配环境......
  • Vue2 到 Vue3,重温这 5 个常用的 API
    距离Vue3发布已经过去一年多时间了,从Vue2到Vue3是一个不小的升级,包括周边生态等。虽然目前大多数开发者们在使用的仍旧以Vue2为准,但Vue3显然是Vue开发者们未来必须面对的,......
  • Vue3在Vite中配置scss并使用
     提出问题单个文件引入时,需要在每个 stylelang="scss"scoped标签下这样引入,每次都要手动引入非常麻烦,因此就想做全局配置@import"@/assets/scss/global.scss"......
  • Vue3解决前端跨域问题
    在vue.config.js里添加代理备注:例如vue想请求不在同一台服务器上的localhost:8080服务器的接口,在下面proxy里的target里写上要访问的服务器的前缀,然后写一个别名'/project......
  • Vue3 —— 组件练习题(附源码)
    一、定义一个vue分页组件,实现客户端分页功能1.1、子组件A(页数按钮)<!--本组件用于遍历分页的页数按钮--><templatelang=""><divclass="btn-box"><!--......
  • vue3父组件调用子组件中的方法
    子组件中<scriptsetup>functionqueryOrder(){...代码省略}//使用<scriptsetup>的组件是默认关闭的——即通过模板引用或者$parent链获取到的组件的公开实......
  • electron vue3 项目搭建
    electronvue3项目搭建一.vue项目搭建安装electron需要搭建vue项目,这里用的vue3项目。1.安装下载node 这里用的16版本https://nodejs.org/zh-cn/2.设置淘宝镜像......