diff --git "a/docs/usage-frame/typescript/typescript\344\270\200\346\234\237\347\237\245\350\257\206\347\202\271.md" "b/docs/usage-frame/typescript/typescript\344\270\200\346\234\237\347\237\245\350\257\206\347\202\271.md" index 0e25e0d..f3ced56 100644 --- "a/docs/usage-frame/typescript/typescript\344\270\200\346\234\237\347\237\245\350\257\206\347\202\271.md" +++ "b/docs/usage-frame/typescript/typescript\344\270\200\346\234\237\347\237\245\350\257\206\347\202\271.md" @@ -115,8 +115,9 @@ import logo from './assets/logo.png' ## 基础类型概述 -1️⃣. `unknown`类型 - 定义:表示一个当前时刻还不知道类型的变量,可以将任何类型赋值给该类型,可以使用任意类型方法/属性(编译不报错)。 +### `unknown` + +定义:表示一个当前时刻还不知道类型的变量,可以将任何类型赋值给该类型,可以使用任意类型方法/属性(编译不报错)。 使用: @@ -126,7 +127,7 @@ import logo from './assets/logo.png' - unknown只能赋值给unknown和any -2️⃣. `any`类型 +### `any` 定义:表示一个当前时刻不清楚类型的变量,可以将任何类型赋值给该类型,可以使用任意类型方法/属性(编译不报错)。 @@ -145,7 +146,7 @@ let a; a.concat([]) ``` -3️⃣. `void`类型 +### `void` 定义:表示没有任何类型,与any相反 @@ -158,7 +159,7 @@ a.concat([]) - null - undefined -4️⃣. `null`类型 +### `null` 定义:表示它本身 @@ -167,7 +168,7 @@ a.concat([]) - 是所有类型的子类型,可以赋值给任何类型的变量 - 指定了 **--strictNullChecks** 之后,只能赋值给any和它本身 -5️⃣. `undefined`类型 +### `undefined` 定义:表示它本身 @@ -180,7 +181,7 @@ a.concat([]) - 在指定了 **--strictNullChecks** 之后,*函数的可选参数*以及*类的可选属性*的类型会被自动的加上 `| undefined` -6️⃣. `never`类型 +### `never` 定义:表示永远不存在的值的类型 @@ -194,13 +195,15 @@ a.concat([]) - never类型是任何类型的子类型,可以赋值给任何类型的变量 - **只有never类型才能赋值给never类型** -7️⃣. `boolean`类型 -8️⃣. `number`类型 -9️⃣. `bigint`类型 +### `boolean` + +### `number` + +### `bigint` - 后缀以n结尾,环境必须是es2020+ -🔟. `string`类型 +### `string` 语法: @@ -208,7 +211,7 @@ a.concat([]) const str: string = `这是一个模板字符串,当前时间:${new Date()}`; ``` -1️⃣1️⃣. `array`类型 +### `array` 数组类型的定义方式,如下: @@ -221,6 +224,10 @@ let b: Array = [1, "2"]; let c: { [index: number]: string | number; } = [1, "2"]; + +// 只读数组: +// 只读数组不能赋值给常规数组,毕竟常规数组有的方法/属性,只读数组没有,在调用的时候就可能报错 +let d: ReadonlyArray = ['a', 'b', 'c'] ``` 常用的类数组类型都有自己的接口定义,分别有 `IArguments`, `NodeList`, `HTMLCollection`等,其中 @@ -234,7 +241,7 @@ interface IArguments { } ``` -1️⃣2️⃣. `tuple`类型 +### `tuple` 定义:元组表示一个**已知数量和类型**的数组 @@ -259,7 +266,7 @@ const [a, b, ...c] = tuple1 - 解构元组时,超过元组定义时的索引范围(元组的总长度,包括可选的)会报错,若含剩余参数,则不会报错(值为undefined) - 当无具名元素名称时,若可选,则在类型后面加上?,比如 `boolean?`(这个只有所有的元素都是非具名的时候才行) -1️⃣3️⃣. `enum`类型 +### `enum` 定义: @@ -319,9 +326,12 @@ type ColorKeyType = keyof ColorType let k: ColorKeyType = 'Red' ``` -1️⃣4️⃣. `object`类型 +### `object` + +定义: -定义:非原始类型,表示除了number、string、boolean、bigint、symbol、null、undefined之外的类型 +- 非原始类型,表示除了number、string、boolean、bigint、symbol、null、undefined之外的类型 +- 类型定义使用接口或类型别名均可 **object vs Object vs {}**: @@ -329,7 +339,7 @@ let k: ColorKeyType = 'Red' - 所有类型都能够赋值给Object和{}类型,undefined和null除外 - Object是object的父类型,也是object的子类型 -1️⃣5️⃣. 构造函数类型 +### 构造函数类型 定义:使用大写字母开头,与相对应的小写版本类型一致 @@ -1399,7 +1409,7 @@ type User = { name: string, age: number } - `value as type` - `value` -- `value!`:后缀表达式操作符 `!`,用于1️⃣排除该值可能是null、undefined,以及2️⃣表明value会被明确的赋值 +- `value!`:后缀表达式操作符 `!`,用于:排除该值可能是null、undefined,以及表明value会被明确的赋值 - `value as Type1 as OtherType`:双重断言,先将value断言为type1(比如any或unknown,因为any可以断言为任何类型,同时任何类型都可以断言为any),然后又将type1的类型断言为OtherType ```typescript @@ -1794,9 +1804,7 @@ let mySquare = createSquare(squareOptions); - 类型断言 `obj as SquareConfig` - 索引签名 `[key: string]: any` -### 内部结构解释 - -1️⃣. 可选属性 +### 可选属性(重点🟥🟥🟥) 场景:用于只有在某些条件下存在,或者根本不存在的属性 @@ -1816,14 +1824,38 @@ interface SquareConfig { function createSquare (config: SquareConfig): { color: string; area: number} { let newSquare = { color: 'white', area: 100 } // 此处使用了不存在的属性,报错Property 'clor' does not exist on type 'SquareConfig'. Did you mean 'color'? + // 若想此处不报错,需要在SquareConfig中加上`[s: string]: any;` + // 这样就能使用任何未提前声明的属性了 if (config.clor) { newSquare.color = config.clor } return newSquare } + +// 如果参数config含有squareConfig未声明的属性,会报以下错误 +// Object literal may only specify known properties, and 'abc' does not exist in type 'SquareConfig'. +createSquare({ abc: 'red', width: 100 }) + +// 解决方法1:使用类型断言 +createSquare({ abc: 'red', width: 100} as SquareConfig) + +// 解决方法2:给squareConfig接口添加 +// [s: string]: any; + +// 解决方法3:将对象分配给另一个变量,然后使用该变量(下面两种都是ok的) +// 由于赋值不会进行多余的属性检查,因此编译器不会给出错误 +// 此方法仅作用于config和接口SquareConfig具有重叠的属性,无则报错 +let config = { abc: 'red', width: 100 } +createSquare(config) +let s: SquareConfig = config + +let config2 = { abc: 'red' } +// 报错:Type '{ abc: string; }' has no properties in common with type 'SquareConfig'. +let s: SquareConfig = config2 + ``` -2️⃣. 只读属性 +### 只读属性 定义:一些对象属性只能在创建的时候被赋值,不能修改,若该属性还是可选的,则仅能在对象创建时赋值,其他地方不能操作 @@ -1851,7 +1883,7 @@ ra[0] = 12 a = ra ``` -3️⃣. 接口描述函数类型 +### 接口描述函数类型 语法:类似一个只有参数列表和返回值类型的函数定义,如下: @@ -1869,7 +1901,7 @@ mySearch = function (src: string, sub: string) { } ``` -4️⃣. 接口描述具有索引的对象类型(数组、map等) +### 接口描述具有索引的对象类型(数组、map等) 前置描述: @@ -1927,7 +1959,7 @@ myArr[0] = 'tom' ::: -5️⃣. ``接口描述类类型 `` +### 接口描述类类型 使用: @@ -1992,7 +2024,7 @@ const Clock: ClockConstructor = class Clock implements ClockInterface { ::: -6️⃣. 接口继承 +### 接口继承 定义:接口可以相互继承,即能够从一个接口复制成员到另一个接口,从而更灵活将接口分割到可重用的模块中 @@ -2017,7 +2049,7 @@ square.penWidth = 10 square.sideLength = 20 ``` -7️⃣. 接口实现混合类型 +### 接口实现混合类型 定义:接口能够描述JavaScript中丰富的类型,比如一个对象可以同时作为函数、对象使用,并拥有额外的方法/属性 @@ -2046,7 +2078,7 @@ c.reset(); c.interval = 5.0; ``` -8️⃣. 接口继承类 +### 接口继承类 使用 @@ -2394,7 +2426,7 @@ queryData().then(data => console.log(data)) ## 类 -1️⃣. 类的修饰符 +### 类的修饰符 修饰符类型: @@ -2446,24 +2478,7 @@ const aa = new AA() g.welcome() ``` -2️⃣. 参数属性 - -定义: - -- 参数属性可以在一个地方同时定义并初始化成员属性,将声明和赋值合并到一处 -- 参数属性通过给构造函数添加一个访问修饰符(public、private、protected)来声明,修饰符不能省略 - -```typescript -// 声明了一个私有属性name -class Animal { - constructor(private name: string) { } - move(distanceInMeters: number) { - console.log(`${this.name} moved ${distanceInMeters}m.`); - } -} -``` - -3️⃣. 静态属性 +### 静态属性 定义: @@ -2492,7 +2507,7 @@ class A { new A() ``` -4️⃣. 存取器(get、set) +### 存取器(get、set) 定义:截取控制对对象成员的访问,返回截取后的内容 @@ -2526,7 +2541,7 @@ if (employee.fullName) { } ``` -5️⃣. 类的继承 +### 类的继承 解释: @@ -2560,7 +2575,7 @@ tom.move(34); ``` -5️⃣.1️⃣. 类的初始化顺序 +### 类的初始化顺序 1. 初始化基类字段 2. 运行基类构造函数 @@ -2584,7 +2599,7 @@ class Sub extends Base { const d = new Sub() ``` -6️⃣. 类的实现 +### 类的实现 解释: @@ -2620,7 +2635,7 @@ class Ball implements Pingable { } ``` -7️⃣. 抽象类 +### 抽象类 定义:用关键字 `abstract`定义抽象类和抽象类内的抽象方法,一般作为类的基类使用,一般不会直接被实例化(即不能使用new) @@ -2630,7 +2645,7 @@ class Ball implements Pingable { - 抽象类的抽象方法(必须用abstract修饰)可以包含修饰符(不能是private),且必须在继承类中实现其具体细节 - 抽象类内的方法,若无abstract修饰符,则必须有具体的实现 -8️⃣. 泛型类 +### 泛型类 解释: @@ -2654,7 +2669,7 @@ class A{ const a = new A('jade') ``` -9️⃣. 构造函数的使用 +### 构造函数的使用 ```typescript class Greeter { @@ -2683,11 +2698,12 @@ let greeter2: Greeter = new greeterMaker(); console.log(greeter2.greet()); ``` -9️⃣.1️⃣. 构造函数的参数属性 +### 构造函数的参数属性 解释: -- 在构造函数的参数上加上public、protected、private、readonly修饰符之后,即使构造函数内部无任何操作,也会将这些参数转成类实例的属性 +- 在构造函数的参数上加上public、protected、private、readonly修饰符之后,即参数属性可以在一个地方同时定义并初始化类的成员属性,将声明和赋值合并到一处 +- 参数属性通过给构造函数添加的修饰符不能省略 ```typescript class A { @@ -2706,7 +2722,7 @@ class A { } ``` -9️⃣.2️⃣. 获取类的实例类型 +### 获取类的实例类型 ```typescript class A { @@ -2724,7 +2740,7 @@ const a = new A() getX(a) ``` -9️⃣.3️⃣. 抽象类的构造函数类型 +### 抽象类的构造函数类型 ```typescript abstract class B {} @@ -2739,7 +2755,7 @@ type BInstance = typeof B ``` -🔟. 把类当作接口使用 +### 把类当作接口使用 场景:由于类的定义会创建类型(类的实例类型和构造函数),所以在可以使用接口的地方也可以使用类 @@ -2756,7 +2772,7 @@ interface Point3d extends Point { let point3d: Point3d = {x: 1, y: 2, z: 3}; ``` -1️⃣1️⃣. this +### this 解释: @@ -2854,7 +2870,7 @@ if (c.isD()) { } ``` -1️⃣2️⃣. 类间的关系 +### 类间的关系 解释: diff --git "a/docs/usage-frame/\345\260\217\347\250\213\345\272\217/uniapp/\351\200\237\350\256\260.md" "b/docs/usage-frame/\345\260\217\347\250\213\345\272\217/uniapp/\351\200\237\350\256\260.md" index d6d3c77..1696a0a 100644 --- "a/docs/usage-frame/\345\260\217\347\250\213\345\272\217/uniapp/\351\200\237\350\256\260.md" +++ "b/docs/usage-frame/\345\260\217\347\250\213\345\272\217/uniapp/\351\200\237\350\256\260.md" @@ -2,12 +2,14 @@ > 注意: > 若内容和实际不符,有可能是文档过时了 -> 注意: -> 若内容和实际不符,有可能是文档过时了 -> 最新内容还是得看官方文档 +> 注意: +> 若内容和实际不符,有可能是文档过时了 +> 最新内容还是得看官方文档 开发时,若预期效果和展现效果不一致,应该查看开发文档,毕竟uniapp语法有时和正常vue语法不一致。 +对于需要实现的功能,优先插件市场搜索 + ## 基础速记 - uniapp中使用js在不同版本、不同平台可能展示的效果不一样,有可能无法生效,遇到此种情况时应该查看官方文档或者搜索引擎 @@ -613,9 +615,12 @@ downloadTask.abort() downloadTask.onProgressUpdate(callback) ``` -#### uni.getSystemInfo获取系统信息 +### 系统相关 + +#### 获取系统信息 ```js +// 该接口可获取device、os、rom、host、uni、app、屏幕窗口等的信息 uni.getSystemInfo({ //成功获取的回调函数,返回值为系统信息 success: (sysinfo) => { @@ -623,6 +628,412 @@ uni.getSystemInfo({ }, complete: () => {} }); + +const sysInfo = uni.getSystemInfoSync() + +// 获取设备信息:仅app、h5、微信支持 +uni.getDeviceInfo({}) + +// 获取窗口信息:仅app、h5、微信支持 +uni.getWindowInfo({}) + +// 获取app基础信息:仅app、h5、微信支持 +uni.getAppBaseInfo({}) + +// 获取设备的设置信息,比如蓝牙开关、地理位置开关、wifi开关、设备方向:仅app、微信 +uni.getSystemSetting({}) + +// 跳转系统对应用的授权管理页面:仅app、微信 +uni.openAppAuthorizeSetting({}) + +// 创建一个监听权限申请的对象 +let permissionListener = uni.createRequestPermissionListener() +permissionListener.onConfirm(e => { + // 权限申请确认做的操作 +}) +permissionListener.onComplete(e => { + // 权限申请完成做的操作 +}) + +function startRequestAuth () { + // 申请读取日历的权限 + plus.android.requestPermissions(["android.permission.READ_CALENDAR"], e => { + + }, e => { + + }) +} +``` + +#### 内存 + +```js +// 监听内存不足告警事件:不支持h5、抖音飞书,该api需下载插件 +uni.onMemoryWarning(function (res) {}) + +// 取消监听:不支持app、h5、抖音飞书、qq +uni.offMemoryWarning(function (res) {}) +``` + +#### 网络状态 + +```js +// 获取网络类型 +uni.getNetworkType({}) + +// 监听网络状态变化 +uni.onNetworkStatusChange(function (res) {}) + +// 取消监听网络状态变化:仅支持app、h5、微信、快手 +uni.offNetworkStatusChange(function (res) {}) +``` + +#### 系统主题 + +```js +// 监听系统主题状态变化:dark,light +uni.onThemeChange(function (res) {}) + +// 取消监听系统主题状态变化:app、h5、微信、飞书支持 +uni.onThemeChange(function (res) {}) +``` + +#### 拨打电话 + +```js +// 拨打电话:app需要在manifest中添加权限 +uni.makePhoneCall({ + phoneNumber; '', + s_f_c(){} +}) +``` + +#### 扫码 + +```js +// 调起客户端扫码界面 +uni.scanCode({ + // 扫码源:相机、相册 + onlyFromCamera: false, + scanType: [''], + // ...... +}) +``` + +#### 剪切板 + +```js +// 设置系统剪切板内容 +uni.setClipboardData({ + data: '', + // 是否弹窗提示 + showToast: true, + s_f_c(){} +}) + +// 获取剪切板内容 +uni.getClipboardData({}) +``` + +#### 屏幕亮度 + +```js +// 设置屏幕亮度:不支持h5 +// 避免在onShow使用,不然会一直触发 +uni.setScreenBrightness({ + value: 0.5, + s_f_c(){} +}) + +// 获取屏幕亮度:不支持h5 +uni.getScreenBrightness({}) + +// 设置屏幕保持常亮,仅在当前应用生效,离开应用失效,不支持h5 +uni.setKeepScreenOn({ + keepScreenOn: true +}) +``` + +#### 截屏 + +```js +// 监听用户主动截屏事件,使用系统截屏按键截屏时触发,不支持h5 +uni.onUserCaptureScreen(function (path) { + // 截屏文件路径 +}) + +// 取消监听用户主动截屏事件,使用系统截屏按键截屏时触发,不支持h5、qq +uni.offUserCaptureScreen(function (res) {}) + +// 开启关闭防截屏,仅支持app +// 安卓某些页面(图片选择、图片预览、一键登录、原生插件内部等页面)不支持 +uni.setUserCaptureScreen({ + // 是否允许截屏 + enable: true +}) +``` + +#### 振动 + +```js +// 使手机发生振动 +uni.vibrate({}) + +// 使手机长时间发生振动(400ms) +uni.vibrateLong({}) + +// 使手机短时间振动(15ms) +uni.vibrateShort({}) +``` + +#### 手机联系人 + +```js +// 添加联系人:h5、抖音飞书、qq、京东不支持 +uni.addPhoneContact({ + firstName: '', + remark: '', + mobilePhoneNumber: '', + // ... +}) +``` + +#### 蓝牙 + +```js +// 初始化蓝牙模块,其他api必须在这之后调用,未开启蓝牙会报错 +uni.openBluetoothAdapter({}) + +// 开始搜寻附近的蓝牙设备,比较耗费系统资源 +// 应该在搜索并连接到设备后,调用停止搜寻方法停止搜索 +// app仅支持ble蓝牙,其他设置参考插件市场 +uni.startBluetoothDevicesDiscovery({ + // ... +}) + +// 停止搜索 +uni.stopBluetoothDevicesDiscovery({ + // ... +}) + +// 监听寻找到的新设备事件 +uni.onBluetoothDeviceFound(function (devices) {}) + +// 监听蓝牙适配器状态变化事件 +uni.onBluetoothAdapterStateChange(function(res) {}) + +// 根据uuid获取处于已连接状态的设备 +uni.getConnectedBluetoothDevices({ + services: ['uuid1'] +}) + +// 获取在蓝牙模块生效期间所有发现的蓝牙设备,包括已连接的 +uni.getBluetoothDevices({}) + +// 获取本机蓝牙适配器状态 +uni.getBluetoothAdapterState({}) + +// 关闭蓝牙模块,断开连接释放系统资源,在使用蓝牙流程后和uni.openBluetoothAdapter成对调用 +uni.closeBluetoothAdapter({}) +``` + +#### Wi-Fi + +https://ext.dcloud.net.cn/plugin?id=10337 + +```js +uni.startWifi({}) +uni.stopWifi({}) +uni.getWifiList({}) +uni.getConnectedWifi({ + // 是否返回部分wifi信息 + partialInfo: true +}) +uni.connectWifi({ + // wifi设备ssid, + SSID: '', + password: '', +}) +// 监听连接上wifi事件 +uni.onWifiConnected(function(wifi){}) +uni.onWifiConnectedWithPartialInfo(CALLBACK) +// 监听获取到wifi列表数据事件 +uni.onGetWifiList(function(res) {}) +``` + +#### 电量 + +```js +// 获取设备电量:不支持快手、京东、抖音、飞书 +uni.getBatteryInfo({}) +``` + +#### 生物认证(指纹、人脸) + +https://zh.uniapp.dcloud.io/api/system/authentication.html + +### 键盘 + +```js +// 隐藏软键盘 +uni.hideKeyboard() + +// 监听键盘高度变化 +uni.onKeyboardHeightChange(callback) +uni.offKeyboardHeightChange(callback) +``` + +### 界面 + +#### 消息提示 + +```js +// 显示消息提示框 +uni.showToast({ + title: '', +}) + +// 隐藏消息提示框 +uni.hideToast() + +// 显示loading提示框 +uni.showLoading({ + title: '' +}) + +// 隐藏loading提示框 +uni.hideLoading() + +// 显示模态弹窗 +uni.showModal({}) + +// 从底部向上弹出操作菜单 +uni.showActionSheet({ + // 按钮文字的数组 + itemList: [''] +}) +``` + +#### 设置导航条 + +```js +// 动态设置当前页面的标题 +uni.setNavigationBarTitle({ + title: '' +}) + +// 设置导航条颜色 +uni.setNavigationBarColor({ + frontColor: '', + backgroundColor: '' +}) + +// 显示导航条加载动画:不支持app、抖音飞书 +uni.showNavigationBarLoading({}) + +// 隐藏导航条加载动画:不支持app、抖音飞书 +uni.hideNavigationBarLoading({}) + +// 隐藏返回首页按钮:仅支持微信、京东、抖音飞书、qq +uni.hideHomeButton({}) +``` + +#### 设置TabBar + +```js +// 动态设置tabBar某项内容 +uni.setTabBarItem({ + index: 0 +}) + +uni.setTabBarStyle({}) + +uni.hideTabBar() + +uni.showTabBar() + +// 为tabBar添加右上角角标文本 +uni.setTabBarBadge({ + index: '', + text: '' +}) + +// 为tabBar移除右上角角标文本 +uni.removeTabBarBadge({ + index: '' +}) + +// 显示tabBar右上角红点 +uni.showTabBarRedDot({ + index: '' +}) + +// 隐藏tabBar右上角红点 +uni.hideTabBarRedDot({ + index: '' +}) + +// 监听中间按钮的点击事件:仅支持app、h5 +uni.onTabBarMidButtonTap(cb) +``` + +#### 背景 + +```js +// 动态设置窗口背景:仅微信、支付宝、百度、qq、快手、京东支持 +uni.setBackgroundColor({}) + +// 动态设置下拉背景字体、loading图样式:仅微信、支付宝、百度、qq、快手、京东支持 +uni.setBackgroundTextStyle({ + textStyle: 'dark | light' +}) +``` + +#### 动画 + +https://zh.uniapp.dcloud.io/api/ui/animation.html + +#### 滚动 + +```js +// 将页面滚动到目标位置 +uni.pageScrollTo({}) +``` + +#### 下拉刷新 + +```js +// 监听下拉刷新事件,需要在pages.json对应的页面节点style开启enablePullDownRefresh +// 该事件,和onLoad同级别 +onPullDownRefresh() + +// 开始下拉刷新 +uni.startPullDownRefresh({}) + +// 停止下拉刷新 +uni.stopPullDownRefresh() +``` + +#### 宽屏适配 + +https://zh.uniapp.dcloud.io/api/ui/adapt.html + +```js +// 设置、获取窗口样式,传入、返回css属性值对象 +uni.getTopWindowStyle() +uni.getLeftWindowStyle() +uni.getRightWindowStyle() + +uni.setTopWindowStyle() +uni.setLeftWindowStyle() +uni.setRightWindowStyle() +``` + +#### 窗口尺寸变化 + +```js +uni.onWindowResize(cb) +uni.offWindowResize(cb) ``` #### uni.createSelectorQuery获取节点信息 @@ -643,6 +1054,24 @@ selectorQuery.exec(data => { }) ``` +#### 节点布局相交状态 + +用于监听多个组件节点在布局位置上的相交状态。常用于推断节点是否被用户看见,以及看见的区域范围 + +#### 媒体查询 + +MediaQueryObserver对象,用于监听页面media query状态的变化,比如页面的宽高是否在某个指定范围 + +#### 小程序右上角菜单按钮位置信息 + +```js +let menuButtonInfo = uni.getMenuButtonBoundingClientRect() +``` + +#### 当前设置的语言 + +https://zh.uniapp.dcloud.io/api/ui/locale.html + ### ArrayBuffer对象和base64字符串互转 ```js @@ -985,6 +1414,47 @@ uni.openVideoEditor({ 见文档https://zh.uniapp.dcloud.io/api/media/video-context.html +### 文件 + +```js +// 对于app的io操作,可使用更强大的plus.io api +// app打开文件,可见插件市场 + +// 保存文件到本地:不支持h5、快手 +// 微信建议使用uni.getFileSystemManager() +uni.saveFile({ + // 需要保存文件的临时路径 + tempFilePath: '' +}) + +// 获取本地已保存的文件列表:不支持h5、快手 +uni.getSavedFileList({}) + +// 获取本地文件的文件信息,仅用于已保存到本地的文件:不支持h5、快手 +uni.getSavedFileInfo({ + filePath: '' +}) + +// 获取文件信息,仅用于已保存到本地的文件:不支持快手 +// 微信建议使用uni.getFileSystemManager() +uni.getFileInfo({ + filePath: '' +}) + +// 删除本地存储的文件:不支持h5、快手 +uni.removeSavedFile({ + filePath: '' +}) + +// 新开页面打开文档格式文件 +uni.openDocument({ + filePath: '', + fileType: '', +}) +``` + +### 绘画 + ### 应用级事件 ```js