关于uniapp简单模板封装想法

背景

因公司业务多是支付宝、微信平台的H5和小程序,为避免需要熟悉多个平台的写法,且降低开发成本,选用了uniapp作为基础框架来开发各个平台的项目。(因为公司成员多数熟悉而选取uniapp,如果是react为主,可借鉴taro

适用场景

公司小型项目投放平台多且杂,需统一代码风格和技术框架时,可选取。 基本功能包括:弹窗+简易请求封装

技术选型:uniapp+vue3+pinia+axios
git地址:

基本目录结构

主要功能用法

request

介绍

uniapp中提供了api --> uni.request来请求,但因使用axios较多,习惯其用法,所以在本模板中引用了axios作为主要的请求库。简易封装了axios,额外扩展了_loading,_retryTimes,onError等参数,配置动态路径等功能,其余用法与axios一致。(不追求过度封装,一切从简,避免理解成本,且因封装而失去了axios的特性。)

主要代码封装在./src/request中,具体的api定义在./src/apis中,按具体模块划分即可。

自定义扩展建议:仅修改axios中定义的拦截器,修改成对应接口所需的响应拦截,不做过多修改。

使用

代码

PS:request方法为创建的axios实例,主要通过上述代码实现额外的扩展能力,如请求loading(_loading)、自定义异常(onError)处理

dialog

介绍

因为基本的营销项目中基本都会用到弹窗,简单封装了基本的弹窗组件,提供了弹窗的显示层级,打开、关闭动画,打开/关闭弹窗参数传递等的功能。

使用

定义组件: 使用全局组件DailogWrapper作为父组件, NAME为弹窗命名,必须定义。里面编写弹窗具体内容。 参数介绍:

  • visible: 是否显示弹窗;
  • openPayLoad: 打开弹窗传入的参数;
  • close: 关闭弹窗的方法;

挂载弹窗: 在使用的页面引入定义的弹窗组件(或将弹窗组件挂载全局)

打开弹窗:通过通用的useDialogStore获得openDialog方法: const res = await openDialog(dialogName, openPayLoad, immediate) 参数介绍: dialogName: 弹窗组件定义的NAME,必传 openPayLoad:传递给弹窗的属性,可为任意数据结构,按需传递 immediate: 是否立刻打开弹窗,默认为false。因为弹窗有队列任务,在关闭弹窗前,打开另外一个弹窗会等待该弹窗关闭时显示。

res: openDialog返回一个promise,reslove的信息为弹窗中调用close传递的参数。常用于接收信息收集弹窗。 设计成此模式是为了避免弹窗间的信息传递需要通过props和emit来传输。

go 复制代码
// 弹窗组件
import { useDialogStore } from '@/store/useDialogStore'
const { close } = useDialogStore()

close(dialogName, closePayload) // closePayload为关闭参数,为openDialog的返回信息

// 页面组件
const res = await openDialog(dialogName, openPayLoad) // 此时的res=== closePayLoad

代码

具体参考git中的src/store/useDialogStoresrc/components/DialogWrapper中的代码。

其他

  • 自定义了一个vite的plugin用于消除uni打包H5后会自动加载一张cdn的图片,会导致首屏渲染慢。

结尾

主要简单总结了对了uniapp框架简单封装的一些基础用法,如果有需要对授权、图表等通用功能的开发或者当前实现功能的实现细节,可评论区留言讨论。

相关推荐
Senar12 分钟前
Web端选择本地文件的几种方式
前端·javascript·html
烛阴29 分钟前
UV Coordinates & Uniforms -- OpenGL UV坐标和Uniform变量
前端·webgl
姑苏洛言34 分钟前
扫码小程序实现仓库进销存管理中遇到的问题 setStorageSync 存储大小限制错误解决方案
前端·后端
烛阴44 分钟前
JavaScript 的 8 大“阴间陷阱”,你绝对踩过!99% 程序员崩溃瞬间
前端·javascript·面试
lh_12541 小时前
ECharts 地图开发入门
前端·javascript·echarts
jjw_zyfx1 小时前
成熟的前端vue vite websocket,Django后端实现方案包含主动断开websocket连接的实现
前端·vue.js·websocket
Mikey_n2 小时前
前台调用接口的方式及速率对比
前端
周之鸥2 小时前
使用 Electron 打包可执行文件和资源:完整实战教程
前端·javascript·electron
我爱吃朱肉2 小时前
HTMLCSS模板实现水滴动画效果
前端·css·css3
机器视觉知识推荐、就业指导2 小时前
开源QML控件:进度条滑动控件(含源码下载链接)
前端·qt·开源·qml