Vue3 中使用组合式API和依赖注入实现自定义公共方法

组合式API

1.在项目根目录 src 文件夹下创建文件夹 utils ,创建 index.js 文件

2.抛出想要对外暴露的方法,以下是一个判断数据类型的方法

复制代码
export function getType(params) {
  // 判断是否是基本类型
  let res = typeof params
  if (res !== 'object') {
    return res
  } else {
    // 判断复杂类型
    const typeStr = Object.prototype.toString.call(params)
    const match = typeStr.match(/\[object (\w+)\]/)
    if (match) {
      return match[1].toLowerCase()
    }
    return 'unknown'
  }
}

3.在 main.js 文件写如下代码,其中注释已附上

复制代码
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
// 引入方法文件
import * as utils from './utils'
// 创建vue实例
const app = createApp(App)
// 全局挂载
app.config.globalProperties.$utils = utils
app.mount('#app')

4.在组件中使用

复制代码
<script setup>
import { ref, onMounted, getCurrentInstance } from 'vue'

defineProps({
  msg: String,
})

onMounted(() => {
  // 使用组合式API获取当前实例
  const instance = getCurrentInstance()
  if (instance && instance.proxy) {
     let res = instance.proxy.$utils.getType(1)
     console.log('====================================')
     console.log(res)
     console.log('====================================')
  }
})
</script>

<template>
  <div>{
  
  { msg }}</div>
</template>

<style scoped>
.read-the-docs {
  color: #888;
}
</style>

依赖注入

1、2步骤是一样的,不过多赘述

3.在 main.js 文件写如下代码,其中注释已附上

复制代码
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
// 引入方法文件
import * as utils from './utils'
// 创建vue实例
const app = createApp(App)
// 依赖注入
app.provide('utils', utils)
app.mount('#app')

4.在组件中使用

复制代码
<script setup>
import { ref, onMounted, inject } from 'vue'

defineProps({
  msg: String,
})

onMounted(() => {
  // 依赖注入
  const utils = inject('utils')
  let res = utils.getType(123)
  console.log('====================================')
  console.log(res)
  console.log('====================================')
})
</script>

<template>
  <div>{
  
  { msg }}</div>
</template>

<style scoped>
.read-the-docs {
  color: #888;
}
</style>
相关推荐
GitLqr5 分钟前
提升 Web 开发效率:我常用的 10 个 TypeScript 实战技巧
vue.js·react.js·typescript
程序员黑豆24 分钟前
鸿蒙应用开发:@Link 装饰器实现父子组件双向同步
前端·后端·harmonyos
前端炒粉25 分钟前
简易实现ssr
开发语言·前端·javascript
顶级自由人38 分钟前
【前端菜鸟的补课01】Zod 与 PostgreSQL 全栈数据工程教学
前端·后端·程序员
swipe1 小时前
11|(前端转全栈)购物车不能只存在前端:用户维度数据如何在后端落库
前端·后端·全栈
meilindehuzi_a2 小时前
Node.js + LangChain.js + Milvus 实战:从 EPUB 入库到《天龙八部》RAG 问答系统
javascript·langchain·node.js
勇往直前plus2 小时前
Vue3(篇四)单页面应用到路由管理
javascript·typescript·前端框架·vue
Chengbei113 小时前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
不简说4 小时前
JS 代码技巧 vol.9 — 20 个设计模式在真实项目里的应用
前端·javascript·github
CoderLiu4 小时前
Agent 工程的下一层:为什么「把流程写成图」还不够,还需要 Graph Engineering
前端·人工智能·后端