1.fixed定位

  • 在H5中,tabbar,顶部导航栏,系统状态栏(手机信号,电量显示等)包含在内容区,H5在定位时,需要算上这些高度(如果页面中存在这个元素的话)
  • 解决办法:使用条件编译,针对不同的平台设定不同的top值
position: fixed;
top:var(--window-top);
/* #ifdef MP-WEIXIN || APP-PLUS */
top:0;
/* #endif */

2.引入阿里巴巴图标库的字体显示异常

在引入阿里巴巴图标库后,打包成app有可能造成以下效果:

解决办法:引入字体文件是添加https前缀

@font-face {
font-family: "iconfont"; /* Project id 2271765 */
src: url('https://at.alicdn.com/t/font_2271765_8z0uelhyxja.woff2?t=1620961638438') format('woff2'),
url('https://at.alicdn.com/t/font_2271765_8z0uelhyxja.woff?t=1620961638438') format('woff'),
url('https://at.alicdn.com/t/font_2271765_8z0uelhyxja.ttf?t=1620961638438') format('truetype');
}

详见官方文档说明uniapp字体图标

3.指令

  • 在H5平台 使用 v-for 循环整数时和其他平台存在差异,如 v-for="(n, index) in 10" 中,在H5平台 n 从 1 开始,其他平台 n 从 0 开始,可使用第二个参数 index 来保持一致(index从0开始)
  • 在小程序平台中v-show指令无效,建议统一使用v-if

4.组件参数

  • 在小程序平台中,组件参数不得直接传递数组长度,否则无法检测其更新,建议使用计算属性(后期已修复)
  • 在小程序平台中,组件参数传递一个引用类型的数据时(对象,数组)时,是深拷贝了一份,而H5和app平台的数据源和接收者指向同一个数据,所以不能直接对prop进行修改
  • 在小程序平台中,封装自定义组件的v-model时,在小程序中务必使用value和input
model:{
prop:'value',
event:"input"
},

4.页面背景色和高度

  • page标签是应用的根标签,H5平台,page标签会被编译成uni-page-body标签,而其他页面都是page标签或者uni-page-body标签的直接子元素
  • page标签高度默认自适应,可以在公共样式中为其设定高度100%和默认的背景色
  • 如果页面需要设定其他的背景色,可以在页面根标签中设定
//common.css 默认背景色
page{
height: 100%;
background-color: #f8f8f8;
}
//自定义页面背景色
<style scoped>
.page-wrap{
min-height: 100%;
background-color: $uni-bg-color-grey;
}
</style>

5.页面定时器要及时清除

  • 当页面卸载,或者隐藏之后,需要清除页面内的定时器
//监听页面隐藏
onHide(){
//清除定时器
clearTimeout(this.timer)
},
onUnload(){
//清除定时器
clearTimeout(this.timer)
},

6.空值渲染

  • 在小程序平台中,null和undefine渲染到模版中,会将其渲染成null
  • 以上规则会不固定,会随着版本升级反复横跳,建议自行用过滤器处理

7.getApp()

  • H5和App平台获取的是Vue实例,能调用vuex,还能访问Vue的原型链
  • 小程序平台获如果要访问vuex和Vue的原型链,需要getApp().$vm

8.样式穿透

  • 样式穿透只能在页面中使用,在组件中无效

9.上传图片

  • 再上传图片时,uni.uploadFile()的name参数需要固定为file 其他参数在小程序中会失败
    //开启选择图片功能
uni.chooseImage({
count: 1, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album','camera'], //从相册选择或者相机拍照
success: function (res) {
//res.tempFilePaths blob格式的图片列表 可通过地址直接访问
//res.tempFiles 文件列表 通过FormData()读取
//console.log(res.tempFilePaths)
//var formData = new FormData()
//formData.append('img_title',res.tempFiles[0]) //展示loading状态
uni.showLoading({
title: '上传中'
}) //上传图片
uni.uploadFile({
url: getApp().globalData.baseUrl + '/api/inspect/uploadimg', //服务器路径
filePath: res.tempFilePaths[0],//要上传的图片路径
name: "file",//使用固定的参数file 其他参数在小程序中会失败 2022-05-10 zhoulianli
success: (uploadFileRes) => {
var upload_res = JSON.parse(uploadFileRes.data)
console.log(' upload_res', upload_res)
//如果上传成功
if(upload_res.code == 1){
//保存服务器返回的图片地址
that.img_url = upload_res.data
//切换按钮状态
that.status = "success"
//触发父组件的 uploadSuccess 事件 返回图片地址和自定义name
that.$emit('uploadSuccess',{
img_url: upload_res.data,
name: that.name,
params: that.params
})
}
},
complete:()=>{
uni.hideLoading()
}
})
},
})

10.启动过慢

  • 首页如果不存在图片,则一定要关闭下面的选项
  • 这里官方的文档个人认为存在问题,官方说法是:等待首页渲染完毕后再关闭Splash图,实质指的是图片,因为只有远程图片才会存在加载耗时的问题

11.条件渲染嵌套

  • v-show指令多级嵌套后,在微信小程序下,除最外层以外的v-show指令无效

uni-app 坑的更多相关文章

  1. uni app中使用自定义图标库

    项目中难免会用到自定义图标,那在uni app中应该怎么使用呢? 首先, 将图标目录放在static资源目录下: 在main.js中引入就可以全局使用了 import '@/static/icon-o ...

  2. uni app 零基础小白到项目实战-1

    uni-app是一个使用vue.js开发跨平台应用的前端框架. 开发者通过编写vue.js代码,uni-app将其编译到Ios,android,微信小程序等多个平台,保证其正确并达到优秀体验. Uni ...

  3. uni app以及小程序 --环境搭建以及编辑器

    https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 根据以上网页下载自己电脑相应的版本的微信开发者工具(目录 ...

  4. uni app canvas 不生效

    canvas 创建canvas绘图上下文. <canvas style="width: 300px; height: 200px;" canvas-id="firs ...

  5. uni app 零基础小白到项目实战2

    <template> <scroll-view v-for="(card, index) in list" :key="index"> ...

  6. uni app 零基础小白到项目实战

    $emit 子组件传给父组件 $ref 父组件操作子组件 公用模板 uni-app全局变量的几种实现方法 const websiteUrl = 'http' const now = Date.now ...

  7. uni app中关于图片的分包加载

    因为在项目中使用了大量的静态资源图片,使得主包体积过大, 而把这些图片全部放到服务器又有点麻烦,就想能不能把图片也分包,但是直接放在分包下的话导致图片资源找不到了, 在社区中看到大佬分享的十分有用,特 ...

  8. 5G到来,App的未来,是JavaScript,Flutter还是Native ?

    Native App React Native(RN)发布于2015年,也是使用JavaScript语言进行跨平台APP的开发.与H5开发不同的是,它使用JS桥接技术在运行时编译成各个平台的Nativ ...

  9. html5 一些好用的原生事件

    计算机技术发展这么多年, 有些方面太老了,不适合新时代的发展, 使用新的规范,更方便开发和使用, 提高各方使用人的工作效率, 何乐而不为 drag drop html5新增属性 某些操作使用拖拽比较方 ...

  10. Vue接口日常学习

    最近使用uni.app 进行app的开发  页面搭完之后,发现不会调接口,今天学习了下 各个程序运行时,都会发起网络请求,网络相关的API在使用之前都会在使用前配置域名白名单 首先   现在中间件上一 ...

随机推荐

  1. Servlet——执行流程、生命周期、方法介绍、体系结构

    执行流程    生命周期 对象的生命周期是指一个对象从被创建到被销毁的整个过程 Servlet运行在Servlet容器(web服务器)中,其生命周期由容器管理,分为四个阶段:     1. 加载和实例 ...

  2. 音视频入门-6-ffmpeg小实验-从v4l2层获取PC ubuntu摄像头图像

    0. 进行本代码实验的前提 确保已经在ubuntu内正确安装了ffmpeg 手把手安装教程可以参考我的另一篇博文<音视频入门-4-ffmpeg命令快速体验音视频开发/ ffmpeg编译过程经历的 ...

  3. 安装mysql5.7报错启动失败(3534)的处理

    一 ,在官网下载好了mysql5.7之后,解压到对应的文件的夹下 二, 在cmd中进入到mysql下单bin目录下,一定要是管理员权限,执行mysqld --initialize 命令,会看到根目录下 ...

  4. USB协议详解第6讲(USB描述符-端点描述符)

    1.USB描述符 USB描述符有设备描述符.标准配置描述符.接口描述符.端点描述符.字符串描述符,HID设备有HID描述符.报告描述符和物理描述符.今天主要是学习USB端点描述符的组成. 2.端点描述 ...

  5. Linux PSI--Pressure Stall Information

    Google在在Android11及之后版本的LMKD中,使用了psi作为杀进程的策略,本文简单介绍下psi. 转载自使用PSI(Pressure Stall Information)监控服务器资源_ ...

  6. tauri2.0-admin桌面端后台系统|tauri2+vite5+element-plus管理后台EXE程序

    原创Tauri2.0+Vue3+ElementPlus客户端通用后台管理系统Tauri2Admin. tauri2-vue3-admin基于最新跨平台框架 Tauri2.0 整合 Vite5+Vue3 ...

  7. 常见CDN绕过姿势

    CDN绕过: 1.子域名 子域名查询: 在一些网站中有可能只加速了主站,而一些其它子域名和主站在同一个C段或者同服务器 利用子域名查询工具: http://tool.chinaz.com/subdom ...

  8. 避免大量ifelse(枚举、工厂模式、策略模式)

    枚举 public class Test { public static void main(String[] args) { System.out.println(judge("ROLE_ ...

  9. 相机系统 GLFW OPENGL

    目录 0. 前言 1. 世界坐标系 2. GLFW 窗口坐标系 与 坐标系变换 3. 相机是什么东西 4. 相机的平面位移(上下左右) 5. 相机的聚焦点环绕(球形环绕 ArcBall Orbit) ...

  10. NPM 包开发与优化全面指南

    前言 Hey, 我是 Immerse 系列文章首发于[Immerse],更多内容请关注该网站 转载说明:转载请注明原文出处及版权声明! 1. 理解 NPM 包的结构 1.1 package.json ...