# ng-ui **Repository Path**: SunshineC/ng-ui ## Basic Information - **Project Name**: ng-ui - **Description**: 轻量级 uni-app UI 组件库 (NG-UI) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-07 - **Last Updated**: 2026-02-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NG-UI(ng-view)组件库使用文档 `NG-UI` 是一套轻量级的 uni-app UI 组件库(当前仓库的 uni_modules 插件:`ng-view`),包含常用基础组件 + 一套可选的全局工具库(路由、请求、存储、音频、hooks、工具函数等)。 > 本组件库的组件源码使用了 ` ``` #### Props | Prop | 类型 | 默认值 | 说明 | | -------------------- | ---------------- | ------------------------------------------ | -------------------------------- | | modelValue / current | number \| string | `0` | 当前选中的索引 | | list | Array | `[]` | 标签列表,如 `[{name: '标签1'}]` | | keyName | string | `"name"` | 从 list 对象中提取标签名的键名 | | scrollable | boolean | `true` | 是否开启滚动模式 | | lineColor | string | `"#3c9cff"` | 滑块颜色 | | lineWidth | string \| number | `30` | 滑块宽度 | | lineHeight | string \| number | `6` | 滑块高度 | | lineBgSize | string | `"cover"` | 滑块背景尺寸 | | duration | number | `200` | 动画时长(ms) | | activeStyle | object \| string | `{ color: '#3c9cff', fontWeight: 'bold' }` | 激活标签样式 | | inactiveStyle | object \| string | `{ color: '#303133' }` | 未激活标签样式 | | itemStyle | object \| string | `{ height: '44px' }` | 单个 tab 的容器样式 | | mask | object | `{}` | 标签的遮罩配置 | | isMask | boolean | `false` | 是否显示遮罩 | | customStyle | object \| string | `{}` | 自定义样式 | #### Events - `change`:点击标签时触发,返回索引 - `click`:点击标签时触发,返回标签对象 - `longPress`:长按标签时触发,返回索引 --- ### 5.15 ng-radio 单选 源码:[ng-radio.vue](./components/ng-radio/ng-radio.vue) #### 用法 ```vue ``` #### Props | Prop | 类型 | 默认值 | 说明 | | ------------- | --------------------------- | ----------- | ------------------------------------ | | modelValue | boolean \| string \| number | `false` | v-model 值 | | checked | boolean \| string \| number | `null` | 选中值(组件内部判定逻辑以源码为准) | | name | boolean \| string \| number | `true` | 当前项的值 | | size | number \| string | - | 整体大小 | | label | string | - | 文案 | | labelColor | string | `""` | 文案颜色 | | labelSize | number \| string | `30` | 文案大小 | | iconColor | string | - | 图标颜色 | | iconSize | number \| string | `30` | 图标大小 | | disabled | boolean | `false` | 禁用 | | shape | string | `"circle"` | `circle` 等 | | activeColor | string | `"#FFB05C"` | 选中颜色 | | inactiveColor | string | `"#666"` | 未选中颜色 | | customStyle | object \| string | `{}` | 自定义样式 | #### Events - `update:modelValue(value)` - `change(value)` --- ### 5.16 ng-price 价格显示 源码:[ng-price.vue](./components/ng-price/ng-price.vue) #### 用法 ```vue ``` #### Props | Prop | 类型 | 默认值 | 说明 | | ----------- | ---------------- | -------- | ---------------- | | price | number \| string | `0` | 价格数值 | | symbol | string | `"¥"` | 货币符号 | | symbolSize | string \| number | `24` | 货币符号字体大小 | | intSize | string \| number | `32` | 整数部分字体大小 | | decSize | string \| number | `24` | 小数部分字体大小 | | bold | boolean | `false` | 是否加粗 | | color | string | `"#333"` | 颜色 | | customStyle | object \| string | `{}` | 自定义样式 | #### Events - `click`:点击价格时触发 --- ### 5.17 ng-status-bar 状态栏占位 源码:[ng-status-bar.vue](./components/ng-status-bar/ng-status-bar.vue) #### Props | Prop | 类型 | 默认值 | 说明 | | ------- | ------ | --------------- | ------ | | bgColor | string | `"transparent"` | 背景色 | --- ### 5.18 ng-sticky 吸顶 源码:[ng-sticky.vue](./components/ng-sticky/ng-sticky.vue) #### 用法 ```vue ``` #### Props | Prop | 类型 | 默认值 | 说明 | | ----------- | ---------------- | --------------- | ---------- | | offsetTop | string \| number | `0` | sticky top | | zIndex | string \| number | `99` | 层级 | | bgColor | string | `"transparent"` | 背景色 | | disabled | boolean | `false` | 禁用吸顶 | | customStyle | object | `{}` | 自定义样式 | #### Slots - 默认插槽 --- ### 5.19 ng-tabbar 底部标签栏 源码:[ng-tabbar.vue](./components/ng-tabbar/ng-tabbar.vue) #### 用法 ```vue ``` #### Props | Prop | 类型 | 默认值 | 说明 | | ----------- | ---------------- | ---------- | ---------------------- | | fixed | boolean | `true` | 固定底部 | | placeholder | boolean | `true` | fixed 时是否占位 | | height | string \| number | `100` | 高度 | | padding | string | - | 内边距(需要自带单位) | | borderTop | string | - | 顶部分割线 border | | shadow | string | - | 阴影 | | safeArea | boolean | `true` | 底部安全区 | | zIndex | string \| number | `98` | 层级 | | ai | string | `"center"` | align-items | | jc | string | `"center"` | justify-content | | cg | string \| number | `0` | column-gap | | customStyle | object | `{}` | 自定义样式 | #### Slots - 默认插槽 --- ### 5.20 ng-gap 间隔 源码:[ng-gap.vue](./components/ng-gap/ng-gap.vue) #### Props | Prop | 类型 | 默认值 | 说明 | | ------- | ---------------- | ----------- | -------- | | height | string \| number | `20` | 高度 | | bgColor | string | `"#f5f5f5"` | 背景色 | | mt | string \| number | `0` | 上外边距 | | mb | string \| number | `0` | 下外边距 | --- ### 5.21 ng-area 省市区选择器 源码:[ng-area.vue](./components/ng-area/ng-area.vue) #### 用法 ```vue ``` #### Props | Prop | 类型 | 默认值 | 说明 | | ------------------- | ---------------- | ------------ | ------------------------------------ | | show | boolean | `false` | 控制弹窗显示 | | title | string | `"选择地区"` | 标题 | | modelValue | array | `[]` | 默认值:名称数组(长度 3) | | confirmColor | string | `"#3c9cff"` | 确认颜色 | | cancelColor | string | `"#909193"` | 取消颜色 | | confirmText | string | `"确定"` | 确认文案 | | cancelText | string | `"取消"` | 取消文案 | | closeOnClickOverlay | boolean | `true` | 点击遮罩关闭(由内部 ng-popup 控制) | | zIndex | number \| string | `10075` | 层级(透传给 ng-popup) | | activeItemClass | string | `""` | 选中项自定义类名 | | inactiveItemClass | string | `""` | 未选中项自定义类名 | | activeItemStyle | object \| string | `{}` | 选中项自定义样式 | | inactiveItemStyle | object \| string | `{}` | 未选中项自定义样式 | #### Events - `update:show(boolean)`:关闭/打开 - `update:modelValue(array)`:确认时更新名称数组 - `confirm(result)`:确认选择(包含 province/city/district/value/code) - `cancel`:关闭触发 - `change(payload)`:picker 滚动变化 #### Slots(头部工具栏) 内部基于 `ng-picker`,可通过以下插槽传入自定义内容(仅替换对应区域,未传则保持默认取消/标题/确认): - `header-left`:对应 `ng-picker-header` 的 `left` 插槽 - `header`:对应 `ng-picker-header` 的默认插槽(标题区域) - `header-right`:对应 `ng-picker-header` 的 `right` 插槽 插槽参数(slotProps): - `onCancel/onConfirm/onClose` --- ### 5.22 ng-picker 通用选择器 源码:[ng-picker.vue](./components/ng-picker/ng-picker.vue) #### 用法 ```vue ``` #### Props | Prop | 类型 | 默认值 | 说明 | | ------------------- | ---------------- | -------- | -------------------- | | show | boolean | `false` | 控制弹窗显示 | | columns | array | `[]` | 数据列表 | | title | string | `""` | 标题 | | modelValue | array | `[]` | 默认选中项索引 | | keyName | string | `"text"` | 选项对象中显示的键名 | | confirmColor | string | `""` | 确认按钮颜色 | | cancelColor | string | `""` | 取消按钮颜色 | | confirmText | string | `"确定"` | 确认文案 | | cancelText | string | `"取消"` | 取消文案 | | closeOnClickOverlay | boolean | `true` | 点击遮罩关闭 | | zIndex | number \| string | `10075` | 层级 | | activeItemClass | string | `""` | 选中项自定义类名 | | inactiveItemClass | string | `""` | 未选中项自定义类名 | | activeItemStyle | object \| string | `{}` | 选中项自定义样式 | | inactiveItemStyle | object \| string | `{}` | 未选中项自定义样式 | #### Events - `update:show(boolean)`:显示状态改变 - `confirm(result)`:点击确定,返回 `{ value: 选中项数组, index: 索引数组 }` - `cancel`:点击取消 - `change(payload)`:选项改变 #### Slots(头部工具栏) 内部头部使用 `ng-picker-header`,可通过以下插槽传入自定义内容(仅替换对应区域,未传则保持默认取消/标题/确认): - `header-left`:对应 `ng-picker-header` 的 `left` 插槽 - `header`:对应 `ng-picker-header` 的默认插槽(标题区域) - `header-right`:对应 `ng-picker-header` 的 `right` 插槽 插槽参数(slotProps): - `onCancel/onConfirm/onClose` --- ### ng-datetime 日期时间选择器 源码:[ng-datetime.vue](./components/ng-datetime/ng-datetime.vue) `ng-datetime` 是对 `ng-picker` 的封装:内部使用多列滚轮来选择「年/月/日/时/分(/秒)」,并支持 `minDate/maxDate` 限制范围。 #### 基础用法(datetime) ```vue ``` #### 仅选择日期(date) ```vue ``` #### Slots(头部工具栏) `ng-datetime` 内部基于 `ng-picker`,支持透传与 `ng-picker` 一致的头部插槽: - `header-left` - `header` - `header-right` 插槽参数(slotProps)同 `ng-picker`。 #### Props(常用) | Prop | 类型 | 默认值 | 说明 | | -------------- | ------------------ | ------------ | ---------------------------------------- | | show | boolean | `false` | 控制弹窗显示(v-model:show) | | modelValue | string/number/Date | `""` | 当前值(v-model,默认输出格式化字符串) | | mode | string | `"datetime"` | `datetime` / `date` | | minDate | string/number/Date | `""` | 最小可选时间 | | maxDate | string/number/Date | `""` | 最大可选时间 | | showSeconds | boolean | `false` | 是否显示秒列(仅 datetime 生效) | | minuteStep | number/string | `1` | 分钟步进(1-59) | | secondStep | number/string | `1` | 秒步进(1-59,showSeconds=true 时生效) | | format | string | `""` | 输出格式(空则自动:date/datetime 预设) | | updateOnChange | boolean | `false` | 滚动时是否同步 update:modelValue | #### Events - `update:show(boolean)`:显示状态改变 - `update:modelValue(string)`:确定(或 updateOnChange=true 且滚动变化时)更新 - `confirm(res)`:确定,返回 `{ value, date, parts }` - `change(res)`:滚动变化,返回 `{ value, date, parts }` - `cancel`:取消 - `close`:关闭 --- ### 5.23 ng-upload 上传(选择文件 + 预览) 源码:[ng-upload.vue](./components/ng-upload/ng-upload.vue) #### 用法(受控 fileList) `ng-upload` 采用“受控”模式:外部维护 `fileList`,组件仅通过事件回调通知你新增/删除/超限等动作。 ```vue ``` #### Props | Prop | 类型 | 默认值 | 说明 | | ---------------- | ---------------- | --------------------------- | ----------------------------------------- | | accept | string | `"image"` | `image`/`video`/其他(内部识别扩展名) | | capture | string \| array | `["album","camera"]` | 选择来源 | | compressed | boolean | `true` | 图片是否压缩 | | camera | string | `"back"` | 摄像头方向 | | maxDuration | string \| number | `60` | 视频最大时长 | | uploadIcon | string | `"image-empty"` | 上传按钮图标 | | uploadIconColor | string | `"#D3D4D6"` | 上传按钮图标色 | | useBeforeRead | boolean | `false` | 是否启用 beforeRead 回调模式(见 Events) | | previewFullImage | boolean | `true` | 点击图片是否全屏预览 | | maxCount | string \| number | `52` | 最大数量 | | disabled | boolean | `false` | 禁用 | | imageMode | string | `"aspectFill"` | 预览图 mode | | name | string | `""` | 字段名(会在事件 detail 中返回) | | sizeType | array | `["original","compressed"]` | sizeType 透传 | | multiple | boolean | `false` | 是否多选 | | deletable | boolean | `true` | 是否允许删除 | | maxSize | string \| number | `Number.MAX_VALUE` | 最大文件大小(字节) | | fileList | array | `[]` | 文件列表(受控) | | uploadText | string | `""` | 上传按钮文案 | | width | string \| number | `80` | 预览块宽度 | | height | string \| number | `80` | 预览块高度 | | customStyle | object \| string | `{}` | 自定义样式 | | previewImage | boolean | `true` | 是否展示预览区 | > 重要:组件内部还会读取 `props.beforeRead`(函数)作为同步/异步拦截,但该 prop 未在 props.js 中显式声明。你仍然可以按 Vue 的“透传 props”方式传入: > > - `:beforeRead="(file, detail) => true | false | Promise"` #### Events - `beforeRead({ file, name, index, callback })`:当 `useBeforeRead=true` 时触发;你需要手动调用 `callback(true/false)` 决定是否继续 - `afterRead({ file, name, index })`:选择文件后触发(未超限) - `oversize({ file, name, index })`:超出 `maxSize` 触发 - `delete({ file, name, index })`:点击删除触发(你需要更新外部 fileList) - `clickPreview(payload)`:点击预览触发 - `error(error)`:chooseFile 失败或其他错误 #### Slots - 默认插槽:自定义上传按钮区域(替换默认上传按钮) --- ## 6. 工具库(libs)API 文档 工具库的入口导出见:[libs/index.js](./libs/index.js) 你可以通过两种方式使用工具库: 1. 全局安装后: ```js const ng = uni.$ng; // 或 this.$ng / inject("$ng") ng.request.get("/user"); ``` 2. 按需导入: ```js import { request, router, storage, systemInfo, } from "@/uni_modules/ng-view/index.js"; ``` --- ### 6.1 createNGUI / install(插件入口) 入口文件:[index.js](./index.js) #### createNGUI(config?) - 作用:创建 `$ng` 实例并挂载到 `uni.$ng` - 返回:`ngui` 对象,包含全部导出的工具函数 + `sys`(systemInfo 结果)+ `router/push/back` 快捷方法 + `config/version` #### install(app, config?) - 作用:Vue3 插件安装函数(内部调用 createNGUI) - 额外行为: - `app.config.globalProperties.$ng = ngui` - `app.provide("$ng", ngui)` --- ### 6.2 systemInfo() 源码:[system.js](./libs/core/system.js) #### 用法 ```js import { systemInfo } from "@/uni_modules/ng-view/index.js"; const info = systemInfo(); ``` #### 返回字段(常用) - `windowWidth/windowHeight` - `screenWidth/screenHeight` - `statusBarHeight` - `safeArea/safeAreaInsets` - `dpr` - `scaleFactor` - 微信小程序额外:`menuButtonHeight/menuButtonWidth/menuButtonTop/menuButtonRight/menuButtonBottom/menuButtonLeft` --- ### 6.3 storage(带过期时间的存储) 源码:[storage.js](./libs/core/storage.js) 默认前缀:`NG_`(仅影响 storage 工具自身,不影响 `uni.setStorageSync` 的其他 key) #### API - `storage.set(key, value, expireSeconds?) => boolean` 设置同步存储;`expireSeconds` 为秒,传入则会记录过期时间 - `storage.get(key, defaultValue?) => any` 获取同步存储;过期会自动清理并返回 defaultValue - `storage.setAsync(key, value, expireSeconds?) => Promise` - `storage.getAsync(key, defaultValue?) => Promise` - `storage.remove(key) => boolean` - `storage.has(key) => boolean` - `storage.setMultiple({k:v,...})` - `storage.getMultiple(keys: string[]) => Record` - `storage.clear() => boolean` 仅清除带 `NG_` 前缀的 key - `storage.getInfo() => { keys, size, limit }` --- ### 6.4 router(轻量路由封装) 源码:[router.js](./libs/core/router.js) 特性: - 支持 `push/replace/reLaunch/back` - 支持 query 序列化(数组/对象会做特殊处理) - 支持 params(通过 storage 临时存储,跳转后调用 `router.getParams()` 取出并自动清理) - 支持导航守卫:`beforeEach/afterEach/onError` - 自动识别 tabBar:如果目标 path 是 tabBar 页面,会自动切换为 `switchTab` #### API - `router.push(path, options?) => Promise` - `options.mode`:`navigateTo`(默认)/`redirectTo`/`reLaunch`/`switchTab`/`preloadPage` - `options.query`:对象,会拼进 url - `options.params`:对象,不拼接到 url,通过 storage 透传 - 其余字段(animationType 等)透传到 uni 跳转方法 - `router.replace(path, options?) => Promise`(等价于 mode=redirectTo) - `router.reLaunch(path, options?) => Promise` - `router.back(delta=1)`:返回;当栈深不足时回到首页 tabBar 或 pages[0] - `router.getParams() => any`:获取并清理通过 params 传递的数据 - `router.isTab(path) => boolean`:判断是否 tabBar - `router.beforeEach((to, next, redirect) => void | Promise)`:注册前置守卫,返回取消函数 - `router.afterEach((to)=>void)`:注册后置回调,返回取消函数 - `router.onError((error, to)=>void)`:注册错误回调,返回取消函数 #### push 示例(params 传对象) ```js router.push("/pages/detail/detail", { query: { id: 1 }, params: { foo: "bar", deep: { a: 1 } }, }); // 在目标页 onLoad/onShow 中: const params = router.getParams(); ``` --- ### 6.5 audioManager(全局音频控制器) 源码:[audioController.js](./libs/core/audioController.js) #### 事件名称 | 事件名 | 说明 | | -------------- | ------------ | | `onStart` | 开始播放 | | `onItemEnded` | 单首播放结束 | | `onListEnded` | 列表播放结束 | | `onError` | 播放错误 | | `onPause` | 暂停 | | `onStop` | 停止 | | `onReplaced` | 列表被替换 | | `onTimeUpdate` | 播放进度更新 | | `onWaiting` | 缓冲中 | | `onCanplay` | 可以播放 | #### API - `audioManager.set(list, options?)` - 设置播放列表 - `list`:音频数组,每项至少包含 `{ src }` - `options.index`:开始播放索引(默认 0) - `options.playMode`:播放模式(`order`/`loop`/`random`/`single`) - `options.debug`:是否输出调试日志 - `options.itemEndedAt`:触发结束回调的时间点数组(毫秒) - `options.waitMs`:列表级默认播放后等待时间(毫秒) - 顶层回调:如 `onStart(){}, onItemEnded(){}` 等 - `audioManager.play(index?, isManualAction?)` - 播放指定索引 - `audioManager.toggle()` - 切换播放/暂停 - `audioManager.pause()` - 暂停 - `audioManager.stop()` - 停止并清空状态 - `audioManager.seek(time)` - 跳转到指定时间(秒) - `audioManager.next()` - 下一首 - `audioManager.prev()` - 上一首 - `audioManager.setMode(mode)` - 设置播放模式(`order`/`loop`/`random`/`single`) - `audioManager.setLoop(times)` - 设置循环次数 - `audioManager.setPlaybackRate(rate)` - 设置播放倍速(0.5-3.0) - `audioManager.on(eventName, callback)` - 订阅事件 - `audioManager.off(eventName, callback?)` - 取消订阅 - `audioManager.getState()` - 获取当前状态 --- ### 6.6 request / createRequest 源码:[request.js](./libs/core/request.js) 导出形式: - `request`:默认实例(`export default createRequest()`) - `createRequest(instanceConfig)`:创建独立实例(独立拦截器、独立 baseURL 等) #### 全局配置来源 request 会合并以下配置(后者覆盖前者): 1. 内置默认配置(DEFAULT_REQUEST_CONFIG) 2. `uni.$ng.config.request`(如果你安装了插件并设置了 config) 3. 实例级配置(`createRequest(instanceConfig)` 传入) 4. 单次请求 options(`request({ ... })` 传入) #### request(options) 扩展字段 在 `uni.request` 官方参数基础上,额外支持: - `baseURL`:覆盖本次请求的 baseURL - `needToken: boolean`:是否自动注入 token(默认 true) - `token: { enable, storage, key, headerName, prefix }`:覆盖 token 策略 - `storage: "uni" | "ng"`:读取 token 的方式;`ng` 会用 `storage.get()` - `returnType: "data" | "response"`:默认返回 `res.data`;传 `"response"` 则返回完整 response - `validateStatus(statusCode) => boolean`:自定义状态码成功判定 #### get/post/put/delete 快捷方法 - `request.get(url, data?, options?)` - `request.post(url, data?, options?)` - `request.put(url, data?, options?)` - `request.delete(url, data?, options?)` #### 拦截器 request 同时支持两种拦截器: 1. 配置数组形式(全局/实例配置中): - `requestInterceptors: Function[]`:入参为 requestOptions,返回可选的 requestOptions(支持 Promise) - `responseInterceptors: Function[]`:入参为 response,返回可选的 response(支持 Promise) 2. 类 axios 形式(每个实例自带): - `request.interceptors.request.use(onFulfilled, onRejected?) => id` - `request.interceptors.request.eject(id)` - `request.interceptors.request.clear()` - `request.interceptors.response.use(...)` #### abort(取消请求) `request.request()` 返回的是 Promise,并附带: - `promise.task`:可拿到 `RequestTask` - `promise.abort()`:内部调用 `RequestTask.abort()` 示例: ```js const p = request.get("/list"); // 取消 p.abort(); ``` --- ### 6.7 hooks #### useCountDown(options?) 源码:[useCountDown.js](./libs/hooks/useCountDown.js) - 入参:`{ onFinish?, interval=1000 }` - 返回: - `timeData`:computed,包含 `day/hour/minute/second/milliseconds/remain` - `remain`:ref,剩余毫秒 - `start(ms)`:启动 - `stop()`:停止 - `reset(ms)`:重置 #### useAppUpdate(options) 源码:[useAppUpdate.js](./libs/hooks/useAppUpdate.js) - 入参: - `api(params) => Promise`:请求版本信息的 API(必传,仅 APP-PLUS 下生效) - `shouldUpdate(res) => boolean`:判断是否需要更新(必传) - `downloadUrlField: string`:下载地址字段名(必传) - 返回状态: - `versionData/hasUpdate/updating/downloadProgress/updateStatus/errorMessage/updateType` - 返回方法: - `checkUpdate({ currentVersion? }) => Promise` - `handleUpdate() => Promise` - `cancelUpdate()` - `resetUpdate()` - 工具方法:`normalizeDownloadUrl/isWgtUrl/isApkUrl/isAppStoreUrl/isIOS` --- ### 6.8 utils(工具函数) `libs/index.js` 已全量导出所有工具函数,源码见:[utils/index.js](./libs/utils/index.js) #### 单位与布局 - `px2rpx(px)`:px 转 rpx - `rpx2px(rpx)`:rpx 转 px - `addUnit(value, unit="rpx")`:给数字补单位 - `getWH(wh, width, height) => { w, h }`:解析宽高快捷值 #### 颜色与配置 - `toHex(color)`:颜色转十六进制 - `convertColor(color)`:颜色格式转换 - `getColor(val)`:主题色映射 - `getComponentConfig(componentName, presetName)`:读取组件预设 #### 样式 - `addStyle(customStyle, target="object")`:样式格式转换 - `trim(str, pos="both")`:去空格 #### 校验 - `isEmpty(value)`:判断空 - `isObject(val)`:是否对象 - `isPhone(str)`:是否手机号 - `isEmail(str)`:是否邮箱 - `isIdCard(str)`:是否身份证 - `isNumber(value)`:是否数值 - `isPureNumber(str)`:是否纯数字 #### 数据 - `deepMerge(target, ...sources)`:深度合并 - `deepClone(obj)`:深克隆 - `removeEmpty(obj, isDeep=false)`:过滤空值 #### 辅助 - `padZero(num, length=2)`:补零 - `guid(len=32)`:生成 GUID - `toast(title, options)`:显示提示 - `sleep(ms=30)`:延迟 #### DOM - `getRect(context, selector, all=false)`:获取节点信息 #### 函数式 - `throttle(fn, wait=500, immediate=true)`:节流 - `debounce(fn, wait=500, immediate=false)`:防抖 #### 文件 - `base64ToTempPath(base64)`:base64 转临时路径 #### 日历 - `calendar`:农历/公历转换工具 #### 设备与时间 - `getDevice()`:获取设备信息 - `timeFormat(date, fmt?)`:时间格式化 - `timeFrom(date, option?)`:相对时间 --- ### 6.9 样式 Props 工具函数(props.js) 源码:[props.js](./libs/props.js) - `backgroundStyle(props) => object` - `marginStyle(props) => object` - `paddingStyle(props) => object` - `positionStyle(props) => object` - `getAllStyles(props) => object`:汇总以上样式 - `allProps`:上述所有 props 的聚合对象(供组件 `...allProps` 使用) --- ### 6.10 utils 全量导出 `libs/index.js` 已全量导出所有工具函数,可直接使用: ```js import { rpx2px, timeFormat, calendar, isPhone } from "@/uni_modules/ng-view"; ``` 完整列表见:[utils/index.js](./libs/utils/index.js)