uni-app 常用 api
参考文档:https://uniapp.dcloud.net.cn/
条件编译
1、API 的条件编译
js
// #ifdef H5
平台特有的组件;
// #endif
// #ifdef MP-WEIXIN
平台特有的组件;
// #endif
2、组件的条件编译
html
<!-- #ifdef H5 -->
平台特有的组件
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
平台特有的组件
<!-- #endif -->
3、样式的条件编译
css
/* #ifdef H5 */
平台特有样式
/* #endif */
/* #ifdef MP-WEIXIN */
平台特有样式
/* #endif */
页面和路由
示例
js
// 保留当前页面,跳转到应用内的某个页面,
uni.navigateTo({
url: "/pages/index/index?id=1&name=uniapp",
});
// 返回到原页面
uni.navigateBack();
// 关闭当前页面,跳转到应用内的某个页面。
uni.redirectTo({
url: "/pages/index/index?id=1&name=uniapp",
});
// 关闭所有页面,打开到应用内的某个页面。
uni.reLaunch({
url: "/pages/index/index?id=1&name=uniapp",
});
// 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
uni.switchTab({
url: "/pages/index/index", // 路径后不能带参数
});
提示框loading
js
// 显示 loading 提示框
uni.showLoading({
title: "加载中",
mask: true,
});
// 隐藏 loading 提示框
uni.hideLoading();
下拉刷新
开启下拉刷新
json
// pages.json
{
"path": "pages/index/index",
"style": {
"enablePullDownRefresh": true
}
}
使用下拉刷新
js
export default {
onLoad: function (options) {},
// 监听该页面用户下拉刷新事件
onPullDownRefresh() {
// 触发下拉刷新动画
uni.startPullDownRefresh();
// 停止当前页面下拉刷新
uni.stopPullDownRefresh();
},
// 页面滚动到底部的事件
onReachBottom() {
// 下一页数据
},
};
表单组件picker
使用示例
html
<template>
<picker
@change="handleChange"
:value="value"
:range="options"
range-key="label"
>{{selectedLabel}}</picker>
</template>
<script>
export default {
data() {
return {
// picker index
value: null,
options: [
{
'label': '男性',
'value': 'man',
},
{
'label': '女性',
'value': 'woman',
}
],
}
},
computed: {
selectedLabel(){
return this.options[this.value]?.label
}
},
methods: {
handleChange(e) {
this.value = e.detail.value
},
}
}
</script>
自定义转发内容
js
export default {
onShareAppMessage(res) {
return {
// 转发标题 默认值: 当前小程序名称
title: '自定义分享标题',
// 转发路径 默认值: 当前页面 path ,必须是以 / 开头的完整路径
path: '/pages/test/test?id=123',
// 自定义图片路径 默认值: 使用默认截图
imageUrl: ''
}
}
}
微信手机号登录
通过用户授权,获取手机号code,后台解码后,返回登录token
html
<template>
<view class="mo-button">
点击微信授权
<button
class="mo-open-button"
open-type="getPhoneNumber"
@getphonenumber="handleGetPhonenumberAndLogin"
></button>
</view>
</template>
<script>
export default {
methods: {
async handleGetPhonenumberAndLogin(e) {
console.log(e)
if (!e.detail.code) {
this.$msg.warning('请先授权登录')
return
}
const res = await this.$api.post('/auth/loginByCode', {
code: e.detail.code,
})
console.log(res)
if (res.ok) {
// success
this.$emit('on-success')
}
},
},
}
</script>
<style lang="less" scoped>
/* 按钮 */
.mo-button {
width: 100%;
background-color: $uni-color-primary;
color: #fff;
text-align: center;
font-size: 34rpx;
line-height: 100rpx;
height: 100rpx;
border-radius: 4rpx;
}
.mo-open-type {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
opacity: 0;
}
</style>
lodash防抖
html
<template>
<button @click="debounceSubmit">提交</button>
</template>
<script>
import lodash from 'lodash'
export default {
methods: {
handleSubmit() {
// submit data
},
},
created() {
// 防抖函数
this.debounceSubmit = lodash.debounce(this.handleSubmit, 500)
},
}
</script>
token管理
js
/**
* weixin-token 管理
*/
const WEIXIN_TOKEN_KEY = 'weixin-token'
export function getWeixinToken() {
return uni.getStorageSync(WEIXIN_TOKEN_KEY)
}
export function setWeixinToken(value) {
return uni.setStorageSync(WEIXIN_TOKEN_KEY, value)
}
export function removeWeixinToken() {
return uni.removeStorageSync(WEIXIN_TOKEN_KEY)
}
Tabbar页面传参
适用于tabbar页面传参
js
// query-util.js
/**
* 一次性数据
*/
const DATA = new Map()
const KEY = 'query'
export default {
get() {
const value = DATA.get(KEY)
DATA.clear()
return value || {}
},
set(value) {
DATA.set(KEY, value)
},
}
使用方式
js
// pageA.js
import Query from '@/utils/query-util.js'
// 在页面跳转之前,将数据存入Query
Query.set({'id': '123'})
uni.switchTab({
url: '/pages/pageB/pageB',
})
js
// pageB.js
import Query from '@/utils/query-util.js'
// 在新的页面获取参数
const query = Query.get()
console.log(query)
页面间通信
js
// pageA.js
// 改变this 指向
let that = this
// 由pageA 打开 pageB
uni.navigateTo({
url: '/pages/pageB/pageB',
success: function(res) {
// 监听一次 pageB 的消息
res.eventChannel.once('on-success', that.handleSuccess)
// 向 pageB 发送消息
res.eventChannel.emit("on-init", {data: 'data'});
}
});
js
// pageB.js
// 向pageA传递消息
this.getOpenerEventChannel().emit('on-success')
// 监听页面pageA的消息
onLoad(options) {
const eventChannel = this.getOpenerEventChannel();
eventChannel.once("on-init", function (data) {
console.log(data);
});
},