我是靠谱客的博主 可耐墨镜,最近开发中收集的这篇文章主要介绍vue3中用mitt实现组件之间传递数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

vue2中可以使用$on,$emit,$off 来发射,监听数据,但是vue3中取消了它们,因此要想新的办法。我们可以用mitt来实现。

首先,安装mitt

npm install mitt --save

然后组件内引入

import mitt from 'mitt'

正式使用,先创建监听器,一个组件emit数据,另一个组件on数据

validateForm组件内:

// 创建监听器
export const emitter = mitt()

setup(){

    // 创建存放监听来的函数,采用emit监听
    let funcArr:ValidateFunc[] = []

    const callback = (func:ValidateFunc)=>{
      funcArr.push(func)
    }

    emitter.on('form-item-created',callback)
    
//在组件onUnmounted时取消对该事件的监听    
    onUnmounted(()=>{
      emitter.off('form-item-created',callback)
      funcArr=[]
    })

}

validateInput组件:

//先导入创建好的监听器
import {emitter} from './ValidateForm.vue'


setup(){

    const validateInput = ()=>{
      // 先判断该输入框有无验证规则
      if(props.rules){
        // 若有,则依次 取出验证规则,判断是否符合
        let allPassed = props.rules.every((rule)=>{
          let pass = true
          inputRef.message = rule.message
          // switch语句根据验证类型,分别验证输入值是否满足条件
          switch(rule.type){
            case 'required':
              pass = (inputRef.value.trim() !== '')
              break;
            case 'email':
              pass = (emailReg.test(inputRef.value))
              break
            default:
              break
          }
          return pass

        })

        // 若每种验证条件都通过,才不显示message框
        inputRef.err = !allPassed 
        return allPassed    
      }
      return true
      
    }

   onMounted(()=>{
     emitter.emit("form-item-created",validateInput)
   })

}

这样callback就能接收到传递来的参数。

期间遇到的小问题:

显示emitter.on('form-item-created',callback)括号内的两个参数类型不匹配

 解决:mitt版本问题,安装2.1.0版本即可解决!

最后

以上就是可耐墨镜为你收集整理的vue3中用mitt实现组件之间传递数据的全部内容,希望文章能够帮你解决vue3中用mitt实现组件之间传递数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部