Uniapp适配器
此插件只支持 vue3 版本的 uniapp 应用。
安装
- npm
- yarn
npm install @alova/adapter-uniapp --save
yarn add @alova/adapter-uniapp
使用方法
创建 alova
调用 AdapterUniapp 将返回请求适配器、存储适配器,以及VueHook,因此你不再需要设置这三个项,使用方法完全一致。
import { createAlova } from 'alova';
import AdapterUniapp from '@alova/adapter-uniapp';
const alovaInst = createAlova({
baseURL: 'https://api.alovajs.org',
...AdapterUniapp()
});
请求
请求的使用方法与 web 环境中使用完全一致。已经完全兼容uni.request
,你可以在创建 method 实例的config中指定uni.request
支持的全部配置项
<template>
<view v-if="loading">加载中...</view>
<view>请求数据为:{{ data }}</view>
</template>
<script setup>
const list = () =>
alovaInst.Get('/list', {
// 设置的参数将传递给uni.request
enableHttp2: true,
sslVerify: true
});
const { loading, data } = useRequest(list);
</script>
当使用useRequest/useWatcher
立即发送请求时,它将会在onLoad
钩子中异步执行,因此你可以在methodHandler
中访问 options 数据,访问方式如下:
import { onLoad } from '@dcloudio/uni-app';
let options = {};
onLoad(opt => {
options = opt;
});
const { loading, data } = useRequest(() => getDetail(options.id));
上传
在 method 实例的config中设置requestType: 'upload'
时表示上传文件,请求适配器将会调用uni.uploadFile
,上传的文件数据放在 method 实例的 data 中,你需要在 data 中指定name
、filePath或files
,以及file
(如果需要),这 4 个参数将传到uni.uploadFile
中,同时,你还可以在 data 中指定这 4 个参数外的其他参数,请求适配器会将它们传入到formData
参数中。
同样的,已经完全兼容uni.uploadFile
,你可以在创建 method 实例的config中指定uni.uploadFile
支持的全部配置项,如果还有额外的参数需要设置,请在 method 实例的config中指定。
<template>
<view v-if="loading">上传中...</view>
<view>上传进度:{{ uploading.loaded }}/{{ uploading.total }}</view>
<button @click="handleImageChoose">上传图片</button>
<!-- ... -->
</template>
<script setup>
const uploadFile = (name, filePath, formData) =>
alovaInst.Post(
'/uploadImg',
{
name,
filePath,
// 额外数据将传入uni.uploadFile的formData中
...formData
},
{
// 设置请求方式为上传,适配器内将调用uni.uploadFile
requestType: 'upload',
fileType: 'image',
// 开启上传进度
enableUpload: true
}
);
const { loading, data, uploading, send } = useRequest(uploadFile, {
immediate: false
});
const handleImageChoose = () => {
uni.chooseImage({
success: chooseImageRes => {
const tempFilePaths = chooseImageRes.tempFilePaths;
send('fileName', tempFilePaths[0], {
extra1: 'a',
extra2: 'b'
});
}
});
};
</script>
下载
在 method 实例的config中设置requestType: 'download'
时表示下载文件,请求适配器将会调用uni.downloadFile
。
同样的,已经完全兼容uni.downloadFile
,你可以在创建 method 实例的config中指定uni.downloadFile
支持的全部配置项,如果还有额外的参数需要设置,请在 method 实例的config中指定。
<template>
<view v-if="loading">