码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • uniapp 跨端兼容 条件编译


    背景

    我们项目中的一些配置,布局和交互有部分,在微信和 h5 端有一些兼容问题,可能需要不一样的接口,等等。

    uniapp官网跨端兼容逻辑

    uni-app 已将常用的组件、JS API 封装到框架中,开发者按照 uni-app 规范开发即可保证多平台兼容,大部分业务均可直接满足。

    但每个平台有自己的一些特性,因此会存在一些无法跨平台的情况。

    • 大量写 if else,会造成代码执行性能低下和管理混乱。
    • 编译到不同的工程后二次修改,会让后续升级变的很麻烦。

    在 C 语言中,通过 #ifdef、#ifndef 的方式,为 windows、mac 等不同 os 编译不同的代码。 uni-app 参考这个思路,为 uni-app 提供了条件编译手段,在一个工程里优雅的完成了平台个性化实现。

    实现

    既然uniapp 给我们提供了方法,我们只需要按照他的逻辑去书写即可,下面是他的语法:

    以 #ifdef 或 #ifndef 加 %PLATFORM% 开头,以 #endif 结尾。

    • #ifdef:if defined 仅在某平台存在
    • #ifndef:if not defined 除了某平台均存在
    • %PLATFORM%:平台名称

    常用平台名称

    值生效条件
    APP-PLUSApp
    APP-PLUS-NVUE或APP-NVUEApp nvue 页面
    H5H5
    MP-WEIXIN微信小程序

    示例:

    不同平台请求不同接口

    1. getAll(keyword = '', pagenum = '') {
    2. // #ifdef APP-PLUS
    3. uni.request({
    4. url: `/search1/keyword?keyword=${this.keywordNow}&type=&pageNum=${pagenum}&pageSize=10`,
    5. success: (res) => {
    6. //console.log(res.data, this.list.length, res.data.total);
    7. this.total = res.data.total
    8. if (this.list.length < res.data.total) {
    9. this.list.push(...res.data.courseList)
    10. }
    11. }
    12. });
    13. // #endif
    14. // #ifdef H5
    15. uni.request({
    16. url: `/search2?keyword=${this.keywordNow}&type=&pageNum=${pagenum}&pageSize=10`,
    17. success: (res) => {
    18. //console.log(res.data, this.list.length, res.data.total);
    19. this.total = res.data.total
    20. if (this.list.length < res.data.total) {
    21. this.list.push(...res.data.courseList)
    22. }
    23. }
    24. });
    25. // #endif
    26. }

    除了js也支持 html 和 css,只是注释不一样:

    1. html
    2. <view class='box'>weixinview>
    3. css
    4. /* #ifdef MP-WEIXIN */
    5. .box{样式}
    6. /* #endif *

    static 目录的条件编译

    比如我们使用不同平台,展示不同的图片

     这样只有微信平台才会出现的图片静态就放置好了

    参考文档:什么是编译器 | uni-app官网 (dcloud.net.cn)

  • 相关阅读:
    扫普通二维码进入小程序、链接进入小程序
    徜徉大数据时代 kafka从入门到实战,一起进入kafka世界
    TransReID | 首次将transformer应用于行人重识别
    PowerShell install 一键部署hfish
    VMware vCenter和ESXi 升级注意事项
    【Android内存优化】内存泄露优化之强引用变弱引用完全详解
    软件加密系统Themida应用程序保护指南(四):虚拟机的选择
    【力扣】面试经典150题——哈希表
    <VB.net>下CSV文件的导入(读取到DataGridView)和导出(DataGirdView保存到csv)
    WPF在win10/11上启用模糊特效 适配Dark/Light Mode
  • 原文地址:https://blog.csdn.net/paidaboluo/article/details/126820709
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号