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. Identity – Permission Claims & UserClaimsPrincipalFactory

    前言 在 Identity – Authorize 有介绍过, Identity 的验证核心是 Claims. 在 Identity – Without Identity Framework 也看到了 ...

  2. Hive----基本概念

    Hive 基本概念 1. Hive:由 Facebook 开源用于解决海量结构化日志的数据统计. 2. Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 ...

  3. 简化部署流程:Rainbond让Jeepay支付系统部署更轻松

    在如今的开发环境中,部署一套像 Jeepay 这样的 Java 支付系统往往需要开发者面对繁琐的配置.依赖环境管理以及服务的高可用性保障,手动部署和运维变得异常艰巨和费时.然而,借助 Rainbond ...

  4. MYSQL存储过程-练习3 repeat循环

    MYSQL存储过程-练习3 repeat循环 1 DELIMITER $$ 2 3 CREATE PROCEDURE `sp_repeat`() 4 BEGIN 5 DECLARE i INT; 6 ...

  5. 云原生爱好者周刊:OCI 镜像管理新工具 — regclient

    云原生一周动态要闻: OpenKruise v1.0 发布 SlashData 最新报告:560 万开发者使用 Kubernetes,一年增长 67% WasmEdge 0.9.0 发布 Securi ...

  6. KubeSphere 社区双周报 | OpenFunction 集成 WasmEdge | 2023.02.03-02.16

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  7. nginx关于正向代理与反向代理的概念区分

    正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理. 反向代理 反向代理中客户端对 ...

  8. 学习JavaScript第三天

    文章目录 1.数组 1.1创建数组 1.2数组方法 1.3数组遍历 2.函数 2.1函数的定义 2.2函数的参数以及返回值 2.3函数的作用域 2.4函数传参 3.对象 1.数组 在JavaScrip ...

  9. 从零开始学逆向CTF比赛,免费参加,欢迎来玩!

    大家好,我是轩辕. 告诉大家一个好消息:我准备了一次逆向CTF比赛,面向所有人开放,无需购买课程,优秀的小伙伴还有奖励,参赛方式在文末会介绍,欢迎大家一起来玩. 举办这次CTF比赛,是为了检验大家从零 ...

  10. Linux基础常识

    1 什么是shell shell是Linux系统的用户界面,提供了用户与内核交互的一种接口,它接收用户输入的命令并到送到内核去执行,因此也被称为Linux的命令解释器. 显示系统当前使用的shell ...