UniApp条件编译实战:5个多端适配高级技巧
1. 基础条件编译语法
根据不同平台编译不同代码:
// #ifdef APP-PLUS
console.log('这段代码只会在App平台编译');
// #endif
// #ifdef H5 || MP-WEIXIN
console.log('这段代码会在H5和微信小程序平台编译');
// #endif
2. 平台专属组件
为不同平台加载不同组件:
<template>
<view>
// #ifdef APP-PLUS
<app-exclusive-component></app-exclusive-component>
// #endif
// #ifdef MP-WEIXIN
<wx-exclusive-component></wx-exclusive-component>
// #endif
</view>
</template>
3. 差异化样式处理
针对不同平台应用不同样式:
<style>
.btn {
/* 基础样式 */
padding: 10px 20px;
// #ifdef APP-PLUS
/* App平台特有样式 */
border-radius: 8px;
// #endif
// #ifdef MP-WEIXIN
/* 微信小程序特有样式 */
border-radius: 4px;
// #endif
}
</style>
4. 多端API兼容处理
统一封装多端API调用:
function getLocation() {
// #ifdef APP-PLUS
return uni.getLocation({
type: 'wgs84'
});
// #endif
// #ifdef H5
return new Promise((resolve) => {
// H5端定位实现
});
// #endif
// #ifdef MP-WEIXIN
return wx.getLocation({
type: 'gcj02'
});
// #endif
}
平台标识 | 说明 | 使用场景 |
---|---|---|
APP-PLUS | App平台 | 调用原生功能 |
H5 | Web浏览器 | DOM操作等 |
MP-WEIXIN | 微信小程序 | 微信API调用 |
5. 实战:多端登录模块
统一登录接口的多端实现:
export default {
methods: {
login() {
// #ifdef APP-PLUS
this.appLogin();
// #endif
// #ifdef H5
this.h5Login();
// #endif
// #ifdef MP-WEIXIN
this.wxLogin();
// #endif
},
// App端登录
// #ifdef APP-PLUS
appLogin() {
uni.login({
provider: 'apple'
});
},
// #endif
// 微信小程序登录
// #ifdef MP-WEIXIN
wxLogin() {
uni.getUserProfile({
desc: '用于完善会员资料'
});
}
// #endif
}
}
UniApp条件编译为跨平台开发提供了强大的灵活性,特别适合处理平台差异化、优化各端体验、调用平台专属API等场景,能大幅提升代码复用率和开发效率。