当前位置: 首页 > news >正文

uniapp踩坑合集

1、onPullDownRefresh下拉刷新不生效

pages.json对应的style中enablePullDownRefresh设置为true,开启下拉刷新
{"path" : "pages/list/list","style" :{"navigationBarTitleText": "页面标题名称","enablePullDownRefresh": true}
}

2、onReachBottom上拉加载不生效

page中css样式设置了height:100%;
修改为height:auto;即可

3、onPageScroll生命周期不触发

最外层css样式设置了以下样式
height: 100%;
overflow: scroll;

4、onBackPress监听页面返回生命周期

使用场景:APP手机左滑返回时控制执行某些操作,不直接返回上一页(例如:弹框打开时关闭弹框)

注意事项
1、onBackPress上不可使用async,会导致无法阻止默认返回
2、支付宝小程序只有真机可以监听到非navigateBack引发的返回事件(使用小程序开发工具时不会触发onBackPress),不可以阻止默认返回行为
3、只有在该函数中返回值为 true 时,才表示不执行默认的返回,自行处理此时的业务逻辑
4、当不阻止页面返回却直接调用页面路由相关接口(如:uni.switchTab)时,可能会导致页面显示异常,可以通过延迟调用路由相关接口解决
5、H5 平台,顶部导航栏返回按钮支持 onBackPress(),浏览器默认返回按键及Android手机实体返回键不支持 onBackPress()
6、暂不支持直接在自定义组件中配置该函数,目前只能是在页面中来处理。

//场景1:弹框打开时,返回执行关闭弹框
//html
<uni-popup ref="searchPop" type="right" @change="popupChange"><view class="popup-con">1111</view>
</uni-popup>//js
export default {data() {return {boxShow: false}},onBackPress(options) {if( this.boxShow ){this.$refs.searchPop.close();return true}//其他情况执行默认返回},methods: {popupChange(e) {this.boxShow = e.show;},}
}
//场景2,多级返回时
export default {data() {return {boxShow: false}},onBackPress(options) {if( this.boxShow ){this.$refs.searchPop.close();return true}else{if (options.from === 'navigateBack') {  return false;  }uni.navigateBack({  delta: 2  });}},methods: {popupChange(e) {this.boxShow = e.show;},}
}

5、遮罩层不能遮底部导航栏

应用场景:APP升级弹框提示

uni文档api界面——交互反馈中uni.showModal可以遮罩底部导航栏;
uni.showToast(OBJECT)、uni.showLoading(OBJECT)都无法遮罩底部导航栏;

目前可以采用两种方式解决:自定义底部导航栏、打开时隐藏底部导航栏

方法一:自定义底部导航栏

1、在app.vue页面的onLaunch生命周期中隐藏原生底部
onLaunch: function() {console.log('App Launch')uni.hideTabBar();
}
2、自己封装tab组件
<template><view class="foot-bar"><view v-if="hasBorder" class="foot-barBorder"></view><view class="foot-con"><view class="foot-list" v-for="(item,index) in tabList" :key="index" @tap="tabJump(index,item.pagePath)"><img v-if="index!=selectedIndex" class="foot-icon" :src="'/'+item.iconPath" mode="heightFix" /><img v-else class="foot-icon" :src="'/'+item.selectedIconPath" mode="heightFix" /><text v-if="index!=selectedIndex" :style="textStyle">{{item.text}}</text><text v-else :style="textSelectStyle">{{item.text}}</text></view></view></view>
</template><script>export default {name: "tabBar",props: {hasBorder: {type: Boolean,default: false},selectedIndex:{type:[String,Number],default:0},textStyle: {type: Object,default () {return {color:'#999'}}},textSelectStyle:{type: Object,default () {return {color: 'rgb(0, 122, 255)'}}}},data() {return {tabList: [{"pagePath": "pages/tabBar/component/component","iconPath": "static/component.png","selectedIconPath": "static/componentHL.png","text": "内置组件"},{"pagePath": "pages/tabBar/API/API","iconPath": "static/api.png","selectedIconPath": "static/apiHL.png","text": "接口"}, {"pagePath": "pages/tabBar/extUI/extUI","iconPath": "static/extui.png","selectedIconPath": "static/extuiHL.png","text": "扩展组件"}, {"pagePath": "pages/tabBar/template/template","iconPath": "static/template.png","selectedIconPath": "static/templateHL.png","text": "模板"}]};},methods:{tabJump(index,url){if( index == this.selectedIndex ){return}uni.switchTab({url: '/' + url})}}}
</script><style lang="scss" scoped>.foot-bar {position: fixed;left: 0px;right: 0px;bottom: 0px;z-index: 998;width: 100vw;.foot-barBorder {position: absolute;left: 0px;right: 0px;top: -1px;width: 100vw;height: 1px;background-color: #eee;}.foot-con {background-color: #fff;width: 100vw;height: 50px;display: flex;flex-direction: row;align-items: center;.foot-list {flex: 1;display: flex;flex-direction: column;align-items: center;.foot-icon{width: auto;height:30px;}text{font-size: 12px;}}}}
</style>
3、需要底部导航的页面引入组件,当前页面是导航栏第几个,selectedIndex就等于几,从0开始
<template>
<view><TabBar :selectedIndex="0"></TabBar>
</view>
</template>
<script>import TabBar from "@/components/tabBar/tabBar";export default {components:{TabBar},data() {return {}}}
</script>	

方法二:打开时隐藏底部导航栏,关闭时打开导航栏

uni.hideTabBar();uni.showTabBar(); 官方文档
在这里插入图片描述
在这里插入图片描述

6、条件编译的正确写法

语法:以 #ifdef 或 #ifndef 加 %PLATFORM% 开头,以 #endif 结尾

  • #ifdef:if defined 仅在某平台存在
  • #ifndef:if not defined 除了某平台均存在
  • %PLATFORM%:平台名称
//仅出现在 App 平台下的代码
#ifdef APP-PLUS
需条件编译的代码
#endif
//除了 H5 平台,其它平台均存在的代码
#ifndef H5
需条件编译的代码
#endif
在 H5 平台或微信小程序平台存在的代码
#ifdef H5 || MP-WEIXIN
需条件编译的代码
#endif
//css样式中
page{padding-top:24rpx;/* #ifdef  H5 */padding-top:34rpx;/* #endif */
}
//.vue页面中
<template>
<!-- #ifdef APP-PLUS -->
<view>NFC扫码</view>
<!-- #endif -->
</template>
//page.json页面中
//json文件中
//API 的条件编译
//生命周期中
//methods方法中
mounted(){// #ifdef APP-PLUS//APP更新this.checkUpdate();//#endif
}

7、限制input输入类型,replace不生效

//不生效代码
<uni-easyinput v-model="Code" type="number" placeholder="请输入号码" clearable trim="all" :inputBorder="false" @input="gunChange" maxlength="11"></uni-easyinput>methods:{gunChange(e){this.addForm.oilGunCode = e.replace(/[^\d]/g, '');},
}

使用v-model绑定值时,replace回显不生效;将v-model修改为:value即可生效;

//生效代码
<uni-easyinput :value="Code" type="number" placeholder="请输入号码" clearable trim="all" :inputBorder="false" @input="gunChange" maxlength="11"></uni-easyinput>
限制只能输入数字:/[^\d]/g 或 /\D/g (但无法限制0开头)
限制只能输入大小写字母、数字、下划线:/[^\w_]/g
限制只能输入小写字母、数字、下划线:/[^a-z0-9_]/g
限制只能输入数字和点:/[^\d.]/g
限制只能输入中文:/[^\u4e00-\u9fa5]/g
限制只能输入英文(大小写均可):/[^a-zA-Z]/g
去除空格:/\s+/g

8、常见的登录验证

<uni-easyinput v-model="name" placeholder="请输入用户名" clearable trim="all" maxlength="11"></uni-easyinput>
<uni-easyinput v-model="tell" placeholder="请输入手机号" clearable trim="all" maxlength="11"></uni-easyinput>methods:{submitHandle(){//姓名  2-5为的汉字var reg0 = /^[\u4e00-\u9fa5]{2,5}$/,//用户名正则,4到16位(字母,数字,下划线,减号)var reg = /^[a-zA-Z0-9_-]{4,16}$/;//密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符  var reg2 = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;  //Email正则 var reg3 = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; //手机号正则  var reg4 = /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/;  //身份证号(18位)正则  var reg5 = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; //车牌号正则  var reg6 = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;  if( !reg.test(this.name) ){uni.showToast(title:'用户名格式不正确!')}},
}

相关文章:

uniapp踩坑合集

1、onPullDownRefresh下拉刷新不生效 pages.json对应的style中enablePullDownRefresh设置为true&#xff0c;开启下拉刷新 {"path" : "pages/list/list","style" :{"navigationBarTitleText": "页面标题名称","enable…...

再JAVA中如何使用qsort对类进行排序?

目录 结论&#xff1a; 解析&#xff1a; 结论&#xff1a; import java.util.Arrays;class Person implements Comparable<Person>{public String name;public int age;public Person(String name, int age) {this.name name;this.age age;}Overridepublic Stri…...

docker安装clickhouse

安装 docker安装 创建clickhouse目录 mkdir -P /data/clickhouse/datamkdir -P /data/clickhouse/confmkdir -P /data/clickhouse/log 拉取镜像 这里直接拉取最新镜像, 如果需要某个特定版本, 则再拉取的时候指定版本号即可. docker pull clickhouse/clickhouse-server 启动临…...

解决`idea`中`database`工具查询起别名乱码问题

文章目录 解决idea中database工具查询起别名乱码问题场景复现如何解决方式一 设置编码方式二&#xff1a;修改字体 原因说明 解决idea中database工具查询起别名乱码问题 场景复现 使用Idea做查询的并且起别名出现了中文乱码 如何解决 方式一 设置编码 settings->输入框输…...

UE4/5Niagara粒子特效之Niagara_Particles官方案例:1.5->2.3

目录 之前的文章&#xff1a; 1.5 Blend Attributes by Value 发射器更新 粒子生成 粒子更新 2.1 Static Beams ​编辑 发射器更新&#xff1a; 粒子生成 粒子更新 2.2 Dynamic Beams 没有开始模拟前的效果是&#xff1a; 开始模拟后的效果是&#xff1a; 发射器更新 …...

Docker 容器数据卷

Docker挂载主机目录访问如果出现cannot open directory .: Permission denied 解决办法&#xff1a;在挂载目录后多加一个--privilegedtrue参数即可 如果是CentOS7安全模块会比之前系统版本加强&#xff0c;不安全的会先禁止&#xff0c;所以目录挂载的情况被默认为不安全的行…...

STM32--MPU6050与I2C外设

文章目录 前言MPU6050参数电路MPU6050框图 IIC外设框图 IIC的基本结构软件IIC实现MPU6050硬件IIC实现MPU6050 前言 在51单片机专栏中&#xff0c;用过I2C通信来进行实现AT24C02的数据存储&#xff1b; 里面介绍的是利用程序的编程来实现I2C的时序&#xff0c;进而实现AT24C02与…...

项目管理实战笔记1:项目管理常识

序 看了下极客时间的《项目管理实战》&#xff0c;觉得跟之前学习PMP的标准资料还是有所侧重。重新整理下&#xff0c;相比书上繁杂的知识&#xff0c;这个更通俗易懂。 1 角色转换&#xff1a;三大误区 误区1&#xff1a;事必躬亲 自己做事情是可控的&#xff0c;做项目依赖…...

时序分解 | MATLAB实现基于SVMD逐次变分模态分解的信号分解分量可视化

时序分解 | MATLAB实现基于SVMD逐次变分模态分解的信号分解分量可视化 目录 时序分解 | MATLAB实现基于SVMD逐次变分模态分解的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 SVMD分解算法&#xff0c;分解结果可视化&#xff0c;MATLAB程序&#xff…...

阿里云访问端口被限制解决方法记录

阿里云服务器&#xff0c;80端口可以访问&#xff0c;但是加入了安全组端口8080 通过公网访问改端口策略&#xff0c;发现不能被访问 问题出在防火墙&#xff0c;需要重置一下 解决方法&#xff1a; 在运行的服务器上执行如下命令&#xff1a; # iptables -A INPUT -j ACCEP…...

antd5源码调试环境启动(MacOS)

将源码下载至本地 这里antd5 版本是5.8.3 $ git clone gitgithub.com:ant-design/ant-design.git $ cd ant-design $ npm install $ npm start前提&#xff1a;安装python3、node版本18.14.0(这是本人当前下载的版本&#xff09; python3安装教程可参考&#xff1a;https://…...

单片机使用基于时间片轮询系统的-状态机-[1]

目的&#xff1a;【1】用C实现一个超轻量化任务管理系统 【2】具有任务suspend, resume, runonce ,auto loop ,task_delay功能 【3】易于移植&#xff0c;不涉及硬件底层。 示例例码&#xff1a; 利用switch case结构实现了单一层的 task_delay功能。弊端就是switch..case不…...

前端开发怎么解决性能优化的问题? - 易智编译EaseEditing

前端性能优化是确保网站或应用在加载速度、响应性和用户体验等方面达到最佳状态的关键任务。以下是一些解决前端性能优化问题的方法&#xff1a; 压缩和合并代码&#xff1a; 压缩和合并CSS、JavaScript和HTML文件可以减少文件大小&#xff0c;加快加载速度。使用压缩工具&am…...

共享球拍小程序:打破拥有束缚,尽享运动乐趣

市场前景&#xff1a; 随着健身和运动的流行趋势&#xff0c;越来越多的人加入了各种体育项目。然而&#xff0c;拥有球拍作为体育装备的成本较高&#xff0c;对于想要尝试不同运动的人来说&#xff0c;这可能是个阻碍。共享球拍小程序迎合了这一需求&#xff0c;提供了一个经济…...

uniapp 微信小程序 绘制海报,长按图片分享,保存海报

uView UI 2.0 dcloud 插件市场地址 弹窗海报源码 <template><!-- 推荐商品弹窗 --><u-popup :show"haibaoShow" mode"center" round26rpx z-index10076 bgColortransparent safeAreaInsetTop close"goodsclose"><image …...

爬虫异常捕获与处理方法详解

Hey&#xff01;作为一名专业的爬虫代理供应商&#xff0c;我今天要和大家分享一些关于爬虫异常捕获与处理的方法。在进行爬虫操作时&#xff0c;我们经常会遇到各种异常情况&#xff0c;例如网络连接错误、请求超时、数据解析错误等等。这些异常情况可能会导致程序崩溃或数据丢…...

制作网络课堂学习平台(标签嵌套,后代选择器)

网络课堂学习平台 课程 1 这是课程 1 的描述。 模块 1 这是模块 1 的描述。 查看详情 模块 2 这是模块 2 的描述。 查看详情 课程 2 这是课程 2 的描述。 模块 1 这是块 2 的描述。 查看详情...

基于医疗领域数据微调LLaMA——ChatDoctor模型

文章目录 ChatDoctor简介微调实战下载仓库并进入目录创建conda环境并配置环境&#xff08;安装相关依赖&#xff09;下载模型文件微调数据微调过程全量微调基于LoRA的微调基于微调后的模型推理 ChatDoctor简介 CHatDoctor论文&#xff1a; ChatDoctor: A Medical Chat Model F…...

UDP TCP 报文内容

1.UDP 2.TCP 源/目的端口号:表示数据是从哪个进程来,到哪个进程去; 32位序号/32位确认号:后面详细讲;4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最大长度是15*460 6位标志位: o URG:紧急指针是否有效 ——urgent 紧急的 o ACK:确认号是否有…...

Boost开发指南-4.8operators

operators C提供了强大且自由的操作符重载能力&#xff0c;可以把大多数操作符重新定义为函数&#xff0c;使操作更加简单直观。这方面很好的例子就是标准库中的string和 complex&#xff0c;可以像操作内置类型int、double那样对它们进行算术运算和比较运算&#xff0c;非常方…...

【大窗除强信号,小窗清残留】基于双尺度广义交叉验证阈值的地震信号自适应剥离和噪声提取方法(MATLAB)

背景知识在环境噪声层析成像等研究中&#xff0c;我们需要的是纯粹的“噪声”记录&#xff0c;而不是被地震信号“污染”的波形。传统方法是人工剔除含事件的时间段&#xff0c;或者用时间域归一化压制信号&#xff0c;但这些方法要么主观&#xff0c;要么难以彻底去除能量较强…...

实战复盘:我是如何用Turbo Intruder的race.py脚本,5分钟挖到一个高并发订单漏洞的

高并发漏洞狩猎实录&#xff1a;从Turbo Intruder脚本调优到电商系统攻防实战 去年在一次众测项目中&#xff0c;我偶然发现某电商平台的积分兑换系统存在并发处理缺陷。这个漏洞最终被评级为高危&#xff0c;而整个挖掘过程只用了不到5分钟——关键就在于对Turbo Intruder的ra…...

ChromePass终极指南:浏览器密码提取与安全管理完全攻略

ChromePass终极指南&#xff1a;浏览器密码提取与安全管理完全攻略 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass 副标题&#xff1a;从密码危机到数据掌控&#xff1a;3步实现…...

轴承故障诊断实战:从振动信号到Python代码的完整分析流程

轴承故障诊断实战&#xff1a;从振动信号到Python代码的完整分析流程 在工业设备维护领域&#xff0c;轴承作为旋转机械的核心部件&#xff0c;其健康状态直接影响设备运行效率与安全性。传统的人工巡检方式已难以满足现代工业对故障预警的实时性需求&#xff0c;而基于振动信号…...

宁波小程序公司提供专业的小程序开发服务

在宁波小程序公司的服务中&#xff0c;我们致力于为客户提供清晰的内容结构和流畅的表达。我们通过深入的需求分析&#xff0c;确保每个项目都能符合客户特定的期望和市场需求。设计阶段注重市场调研&#xff0c;力求在视觉和功能上都能满足用户的使用习惯和偏好。开发过程中&a…...

大数据运维 | 项目一:大数据分布式集群搭建全攻略

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 前言 作为一名大数据运维工程师&#xff0c;你是否遇到过这样的问题&#xff1a; 问题场景描述1机器A可正常上网&#xff0c;但机器B无法连接网…...

计算机毕业设计springboot在线病患管理系统 基于SpringBoot的智慧医疗就诊服务平台设计与实现 基于Java Web的医院数字化门诊住院一体化系统开发

计算机毕业设计springboot在线病患管理系统79jbb1co &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着我国医疗资源分布不均、基层医疗服务能力不足等问题的日益凸显&#xff…...

基于 MATLAB 的非线性优化算法实现:BFGS + Armijo 线搜索

基于matlab的非线性优化算法实现 通过梯度下降法&#xff08;具体实现为 BFGS 方法&#xff09;&#xff0c;并结合 Armijo 线搜索方法&#xff0c;对一个多项式目标函数进行优化&#xff0c;找到其最优解。 开发语言&#xff1a;matlab非线性优化问题在科学计算和工程应用中非…...

ai辅助开发:告诉快马你的想法,自动生成jdk17最佳实践代码

今天想和大家分享一个特别实用的开发技巧——如何用AI辅助快速掌握JDK17的新特性。作为一个经常需要升级Java版本的开发者&#xff0c;我发现每次版本更新都要花大量时间学习新语法&#xff0c;直到遇到了InsCode(快马)平台的AI辅助功能。 传统开发方式的痛点 以前用JDK8写代码…...

RK3576/RK3588 Yolo11 目标检测 Demo

前言 以前的大作业&#xff0c;根据rknn_model_zoo和easy eai示例代码修改&#xff08;缝合&#xff09;&#xff0c;仅供参考 后来我试着模块化一些&#xff0c;方便看&#xff0c;但因为核心代码都是直接用的示例代码&#xff0c;所以有些模块还是耦合&#xff08;composit…...