当前位置: 首页 > article >正文

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>

http://www.kler.cn/a/515039.html

相关文章:

  • Debian 上安装PHP
  • 梯度提升决策树树(GBDT)公式推导
  • 为什么redis会开小差?Redis 频繁异常的深度剖析与解决方案
  • AI Agent:数字文明的暗物质,如何悄然改变我们的世界?
  • RK3568笔记七十七:RTMP实时推流
  • 【Elasticsearch】 Ingest Pipeline `processors`属性详解
  • 洛谷P8195
  • c++算法贪心系列
  • 2024.1.22 安全周报
  • 大华Java开发面试题及参考答案 (下)
  • UE5 开启“Python Remote Execution“
  • 解决go.mod文件中replace不生效的问题
  • Mono里运行C#脚本31—mono_arch_create_generic_trampoline
  • YOLOv10-1.1部分代码阅读笔记-predictor.py
  • 【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告
  • 如何实现亿级用户在线状态统计?
  • .NET MAUI进行UDP通信(二)
  • 吴恩达深度学习——如何实现神经网络
  • 【2024年华为OD机试】 (E卷,100分) - 预订酒店(JavaScriptJava PythonC/C++)
  • Ubuntu20彻底删除MySQL8
  • WPS计算机二级•幻灯片的基础操作
  • Qt调用ffmpeg库实时播放rtmp或rtsp视频流
  • 【玩转全栈】----Django模板的继承
  • 使用Chrome和Selenium实现对Superset等私域网站的截图
  • 【学习笔记】计算机网络(一)
  • Ubuntu20.04 安装 cartographer