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

UNIAPP如何自定义全局方法?

最近再写uniapp的时候,发现工作中有些小伙伴对于如何定义一些全局方法不是很清楚,无法清晰地去封装和完善公共方法,这里简单的介绍一下

技术栈:uniapp + vue3 + vite + ts(typescript)

一 定义一个简单的hooks

1、什么是hook(钩子机制,钩子函数)?

在JavaScript和前端开发中,Hooks通常与React框架中的Hooks概念相关联,但在其他框架或环境中,我们可以通过其他方式模拟或实现类似的功能。

钩子函数一般是一种再特定时间或者函数执行前后插入的自定义代码的技术,允许扩展或者修改原有的程序的行为

包括:函数修改、状态管理,事件拦截等

比如:使用uniapp去二次封装一个全局的提示 hooks/useToast.ts


const defaultToastOpts: UniApp.ShowToastOptions = {icon: 'none',mask: true,duration: 1500,
}export const useCommon  = () => {const Toast = (arg: string | UniApp.ShowToastOptions) => {if (typeof arg === 'string') { uni.showToast({ title: arg })} else {const opts: object = {title: arg.title,...defaultToastOpts,...arg,}return uni.showToast(opts)}}Toast.loading = () => uni.showToast({ icon: 'loading', duration: 120000, mask: true         })Toast.clear = () => uni.hideToast()return {Toast}
}

二、定义全局引入的函数

/types/auto-import.d.ts

export {}
declare global {...const useCommon: typeof import('../hooks/useToast')['useToast']...
}import { UnwrapRef } from 'vue'
declare module 'vue' {...readonly useCommon: UnwrapRef<typeof import('../hooks/useToast')['useToast']>...
}

三、如何配置自定引入

vite.config.ts

import uni from "@dcloudio/vite-plugin-uni";
import AutoImport from 'unplugin-auto-import/vite'export default defineConfig({...plugins: [uni(),AutoImport({imports: ['vue', 'uni-app'],dts: 'src/types/auto-import.d.ts',dirs: ['src/hooks'], // 自动导入 hookseslintrc: { enabled: true },vueTemplate: true, // default false}),]...
})

四、如何结合场景使用?

<script setup lang="ts">const { Toast } = useToast()onMounted(() => {Toast('这是一个提示')Toast.loadin()setTimeout(() => {Toast.clear()}, 2000)})
</script>

总结:简简单单实现,有时候代码并不是很多,也能实现一个小功能。

个人的一点小想法,请多多指教!!!

http://www.dtcms.com/a/398123.html

相关文章:

  • 040 线程控制
  • 前端开发利器:nvm、npm与pnpm全面解析与TypeScript/JavaScript选择指南
  • 电影网站如何做seo哪家网站建设公司好
  • LeetCode 刷题【90. 子集 II】
  • Spring Boot启动报错:Failed to configure a DataSource 全面解析与解决方案
  • MongoDB源码delete分析观察者getOpObserver()->onDelete
  • 企业网站模板htmlwordpress cos 配置
  • ACL 2025 Time-LlaMA 大语言模型高效适配时间序列预测
  • 2025开发者云服务器评测:AWS, Vercel, Railway该如何选?
  • 金融数据库--下载全市场股票日线行情数据
  • HTML `<meter>` 标签:原生度量衡指示器,直观展示百分比、评分等量化数据
  • 平安养老险广西分公司 | 开展金融知识公益宣教活动
  • 威海北京网站建设怎么做网站推广世界杯
  • php的网站模板下载如何修改自己的网站标题
  • VS Code 格式化配置优先级与作用机制(不含ESlint)
  • python+springboot+uniapp微信小程序“美好食荐”系统 美食推荐 菜谱展示 用户互动 评论收藏系统
  • 微信小程序页面滚动到指定位置
  • 抢占2025SEO先机:九大趋势洞察与实战行动路线图
  • Ubuntu 安装 Maven 私服 Nexus
  • maven install和package 有什么区别
  • 关于maven编译没把resources资源包含进target目录
  • 网站开发文档合同wap712c
  • [Maven 基础课程]11_Windows 安装 Maven 私服 Nexus
  • LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(3——通过cppjieba库建立索引模块)
  • 早报库|深圳奔向全球“消费级3D打印第一城”;苹果持续扩招增材制造人才;乌军前线大量使用3D打印地雷
  • 爬虫数据存储:MongoDB 在电商采集中的应用
  • 【STM32项目开源】STM32单片机厨房安全监测系统系统
  • 在 ARM64 Ubuntu 20.04 上部署 Mailu 邮件服务器:深度排查 Docker Bridge 网络通信失败问题
  • ubuntu 20 安装python
  • Golang语言基础篇003_数组、切片、map详解