Uniapp笔记(三)uniapp语法2
一、本节项目预备知识
1、组件生命周期
1.1、什么是生命周期
生命周期(Life Cycle)是指一个对象从创建-->运行-->销毁的整个阶段,强调的是一个时间段
我们可以把每个uniapp应用运行的过程,也概括为生命周期
-
小程序的启动,表示生命周期的开发
-
小程序的关闭,表示生命周期的结束
1.2、生命周期的分类
在uniapp中,生命周期分为两类,分别是
-
应用生命周期
特指uniapp应用从启动->运行->销毁的过程。
-
页面生命周期
特指uniapp中,每个页面从加载->渲染->销毁的过程
其中,页面的生命周期范围较小,应用程序的生命周期范围较大
1.3、什么是生命周期函数
生命周期函数:是由uniapp框架提供的内置函数,会伴随着生命周期,自动按次序执行。
生命周期函数的作用:允许程序员在特定的时间点,执行某些特定的操作,例如:页面刚加载的时候,可以在onLoad生命周期函数中初始化页面的数据。
注意:生命周期强调的是时间段,生命周期函数强调的是时间点。
1.4、应用生命周期函数
uniapp的应用生命周期函数需要在App.vue中声明
| 函数名 | 说明 |
|---|---|
| onLaunch | 当uni-app 初始化完成时触发(全局只触发一次) |
| onShow | 当 uni-app 启动,或从后台进入前台显示 |
| onHide | 当 uni-app 从前台进入后台 |
| onError | 当 uni-app 报错时触发 |
| onPageNotFound | 页面不存在监听函数 |
| onThemeChange | 监听系统主题变化 |
export default {onLaunch: function() {console.log('App Launch')},onShow: function() {console.log('App Show')},onHide: function() {console.log('App Hide')}
}
1.6、页面声明周期函数
| 函数名 | 说明 |
|---|---|
| onLoad | 监听页面加载,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参) |
| onShow | 监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面 |
| onReady | 监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发 |
| onHide | 监听页面隐藏 |
| onUnload | 监听页面卸载 |
| onResize | 监听窗口尺寸变化 |
| onPullDownRefresh | 监听用户下拉动作,一般用于下拉刷新,参考示例 |
| onReachBottom | 页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项 |
| onTabItemTap | 点击 tab 时触发,参数为Object,具体见下方注意事项 |
| onShareAppMessage | 用户点击右上角分享 |
| onPageScroll | 监听页面滚动,参数为Object |
| onNavigationBarButtonTap | 监听原生标题栏按钮点击事件,参数为Object |
| onBackPress | 监听页面返回,返回 event = {from:backbutton、 navigateBack} ,backbutton 表示来源是左上角返回按钮或 android 返回键;navigateBack表示来源是 uni.navigateBack ;详细说明及使用:onBackPress 详解。支付宝小程序只有真机能触发,只能监听非navigateBack引起的返回,不可阻止默认行为。 |
| onNavigationBarSearchInputChanged | 监听原生标题栏搜索输入框输入内容变化事件 |
| onNavigationBarSearchInputConfirmed | 监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发。 |
| onNavigationBarSearchInputClicked | 监听原生标题栏搜索输入框点击事件(pages.json 中的 searchInput 配置 disabled 为 true 时才会触发) |
| onShareTimeline | 监听用户点击右上角转发到朋友圈 |
| onAddToFavorites | 监听用户点击右上角收藏 |
2、页面导航
2.1、什么是页面导航
页面导航就是页面之间的相互跳转
2.2、实现页面导航的方式
-
声明式导航:navigator标签来进行跳转
-
编程式导航:uniapp提供的跳转api来实现跳转
2.3、声明式导航
1)导航到tabBar页面
在使用<navigator>组件跳转到指定的tabBar页面时,需要指定url属性和open-type属性
-
url表示要跳转的页面地址,必须以
/开头 -
open-type表示跳转的方式,必须是switchTab
<navigator url="/pages/home/index" open-type="switchTab">跳转主页
</navigator>
2)导航到应用内页面
在使用<navigator>组件跳转到指定的普通页面时,需要指定url属性和open-type属性
-
url表示要跳转的页面地址,必须以
/开头 -
open-type表示跳转的方式,必须是navigate
<navigator url="/pages/list/index" open-type="navigate">跳转到info页面
</navigator>
3)后退导航
如果要后退到上一页或者多级页面,则需要指定open-type属性和delta属性
-
open-type的值必须是naviateBack,表示要进行后退导航
-
delta的值必须是数字,表示要后退的层次
<navigator delta="1" open-type="navigateBack">返回上一层
</navigator
重定向页面:redirect,跳转到指定页面,当前页面就会销毁,无法返回,只能首页按钮
2.4、编程式导航
1) 导航到 tabBar 页面
调用uni.switchTab(Object object)方法,可以跳转到tabBar页面,其中Object参数对象的属性如下
| 属性 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| url | string | 类型 | 需要跳转的tabBar页面的路径,路径后不能带参数 |
| success | function | 否 | 接口调用成功的回调函数 |
| fail | function | 否 | 接口调用失败的回调函数 |
| complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
案例代码
//页面结构
<button type="primary" bindtap="goCategroy">跳转到分类页面</button>
//通过编程式导航,跳转到分类页面
goCategroy(){uni.switchTab({url: '/pages/category/category',})}
2) 导航到应用内页面
调用uni.navigateTo(Object object)方法,可以跳转到应用内的页面,其中Object参数对象的属性列表如下:
| 属性 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| url | string | 类型 | 需要跳转的应用内页面的路径,路径后不能带参数 |
| success | function | 否 | 接口调用成功的回调函数 |
| fail | function | 否 | 接口调用失败的回调函数 |
| complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
//页面结构
<button type="primary" bindtap="goProductList">跳转商品列表页面</button>
//通过编程式导航,跳转到商品列表页面goProductList(){uni.navigateTo({url: '/pages/product/productlist',})}
3) 后退导航
调用uni.navigateBack(Object object)方法,可以返回上一页或者多级页面,其中Object参数对象可选的属性列表如下
| 属性 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| delta | number | 否 | 返回的页面数,如果delta大于现有页面数,则返回到首页 |
| success | function | 否 | 接口调用成功的回调函数 |
| fail | function | 否 | 接口调用失败的回调函数 |
| complete | function | 否 | 接口调用结束的回调函数(调 |
//页面结构
<button bindtap="gotoBack">后退</button>
//通过编程式导航gotoBack(){uni.navigateBack();}
3、导航传参
3.1、声明式导航传参
navigator组件的url属性用来指定将要跳转的页面的路径。同时,路径的后面还可以携带参数
-
参数与路径之间使用?分隔
-
参数键与参数值使用=相连
-
不同参数用&分隔
代码如下所示
<navigator url="/pages/product/productlist?name=giles&age=38" open-type="navigate">跳转到购物页面</navigator>
3.2、编程式导航传参
调用uni.navigateTo(Object object)方法跳转页面时,也可以携带参数,代码如下
goProductList(){uni.navigateTo({url: '/pages/product/productlist?name=Giles&age=38',})}
3.3、接收导航参数
通过声明式导航传参或者编程式导航传参所携带的参数,可以直接在onLoad事件中直接获取到
onLoad: function (options) {}
二、商品列表
1、点击三级分类跳转到商品列表
<view class="cate-lv3-item" v-for="(subitem,subIndex) in item.children" :key="subIndex"@click="goGoodsList(subitem.cat_id)"><image :src="subitem.cat_icon" class="item3_img"></image><text>{{subitem.cat_name}}</text>
</view>
定义事件处理函数如下
goGoodsList(cid){uni.navigateTo({url:`/pages/products/productList?cid=${cid}`})
}
2、定义请求参数对象
我们要根据接口的要求,事先定义一个请求参数对象
data() {return {queryObj:{//查询的关键字query:'',//查询的分类idcid:'',//页面值pagenum:1,//每页显示多少条记录pagesize:10}}
}
将页面跳转时携带的参数,转存到queryObj对象中
onLoad(options) {this.queryObj.cid=options.cid
}
3、获取商品列表数据
在data中定义数据
data(){return{goodsList: [],total: 0,}
}
在 onLoad 生命周期函数中,调用 getGoodsList 方法获取商品列表数据:
onLoad(options) {this.queryObj.cid = options.cidthis.getProductList()
}
声明 getGoodsList 方法如下:
async getProductList() {let result = await this.$request({url: '/goods/search',data: this.queryObj})console.log(result.message.goods);this.goodsList = result.message.goodsthis.total = result.message.total
}
渲染列表结构
<view class="goods-list"><view class="goods-item" v-for="(item,index) in goodsList" :key="index"><view class="goods-item-left"><image :src="item.goods_small_logo||defaultPic" mode="widthFix" class="goods-pic"></image></view><view class="goods-item-right"><!-- 商品标题 --><view class="goods-name">{{item.goods_name}}</view><view class="goods-info-box"><!-- 商品价格 --><view class="goods-price">¥{{item.goods_price}}</view></view></view></view>
</view>
为了防止某些商品的图片不存在,需要在 data 中定义一个默认的图片
export default {data() {return{defaultPic: 'https://img3.doubanio.com/f/movie/8dd0c794499fe925ae2ae89ee30cd225750457b4/pics/movie/celebrity-default-medium.png'} }
}
并在页面渲染时按需使用:
<image src="{{item.goods_small_logo||defaultPic}}" class="goods-pic"></image>
样式
.goods-item {display: flex;padding-left: 10px 0px;border-bottom: 1px solid #f0f0f0;
}
.goods-item-left {margin-right: 5px;
}.goods-pic {width: 100px;height: 100px;display: block;
}
.goods-item-right {display: flex;flex-direction: column;justify-content: space-around;
}
.goods-name {font-size: 12px;
}
.goods-price {font-size: 16px;color: #cb603b;
}
4、上拉加载更多
onReachBottom 事件处理函数,用来监听页面的上拉触底行为
onReachBottom() {//让页码值自增1this.queryObj.pagenum+=1//重新获取列表数据this.getProductList()
},
改造 methods 中的 getProductList 函数,当列表数据请求成功之后,进行新旧数据的拼接处理:
async getProductList() { let result = await this.$request({url: '/goods/search',data: this.queryObj})this.goodsList =[...this.goodsList,...result.message.goods]this.total = result.message.total
}
通过节流阀防止发起额外的请求
在 data 中定义 isloading 节流阀如下
data() {return {// 是否正在请求数据isloading: false}
}
修改 getProductList 方法,在请求数据前后,分别打开和关闭节流阀:
async getProductList() {//打开节流阀this.isloading = truelet result = await this.$request({url: '/goods/search',data: this.queryObj})//关闭节流阀this.isloading = falsethis.goodsList =[...this.goodsList,...result.message.goods]this.total = result.message.total
}
在 onReachBottom 触底事件处理函数中,根据节流阀的状态,来决定是否发起请求:
// 触底的事件
onReachBottom() {// 判断是否正在请求其它数据,如果是,则不发起额外的请求if (this.isloading) return//让页码值自增1this.queryObj.pagenum+=1//重新获取列表数据this.getProductList()
}
判断加载是否完毕
onReachBottom() {if(this.queryObj.pagenum*this.queryObj.pagesize>=this.total){uni.showToast({title:'加载完毕'})}if(this.isloading) return;this.queryObj.pagenum+=1this.getProductList()
},
5、下拉刷新
首先在在page.json配置文件中,开启下来刷新功能
{"path" : "pages/products/productList","style" : {"navigationBarTitleText": "","enablePullDownRefresh": true}}
下拉刷新
onPullDownRefresh() {this.queryObj.pagenum=1this.getProductList()uni.stopPullDownRefresh()
}相关文章:
Uniapp笔记(三)uniapp语法2
一、本节项目预备知识 1、组件生命周期 1.1、什么是生命周期 生命周期(Life Cycle)是指一个对象从创建-->运行-->销毁的整个阶段,强调的是一个时间段 我们可以把每个uniapp应用运行的过程,也概括为生命周期 小程序的启动,表示生命周…...
windows【ftp-FTP】添加配置流程【iis服务】
第一步:自己安装iis服务和ftp服务【自己百度搜索】 第二步:添加ftp站点【配置主动端口默认为21】 第三方配置:ftp被动端口【这里设置为3000-4000】请在防火墙开放此端口【如果是阿里云请在阿里云的后天也开通此端口】【护卫神一般使用55000…...
mysql视图的创建和选项配置详解
在 MySQL 中,可以使用 CREATE VIEW 语句来创建视图。基本的语法如下: CREATE[OR REPLACE][ALGORITHM {UNDEFINED | MERGE | TEMPTABLE}][DEFINER {user | CURRENT_USER}][SQL SECURITY { DEFINER | INVOKER }]VIEW view_name [(column_list)]AS selec…...
Python正则表达式中re.sub自定义替换方法正确使用方法
大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 话不多说,直接开搞,如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 在使用正则替换时,有时候需要将匹配的结果做对应处理,便可以使用自定义替换方法。 re.sub的用法为&…...
hyperf 十五 验证器
官方文档:Hyperf 验证器报错需要配合多语言使用,创建配置自动生成对应的语言文件。 一 安装 composer require hyperf/validation:v2.2.33 composer require hyperf/translation:v2.2.33php bin/hyperf.php vendor:publish hyperf/translation php bi…...
ssh访问远程宿主机的VMWare中NAT模式下的虚拟机
1.虚拟机端配置 1.1设置虚拟机的网络为NAT模式 1.2设置虚拟网络端口映射(NAT) 点击主菜单的编辑-虚拟网络编辑器: 启动如下对话框,选中NAT模式的菜单项,并点击NAT设置: 点击添加,为我们的虚拟机添加一个端口映射。…...
【一等奖方案】大规模金融图数据中异常风险行为模式挖掘赛题「NUFE」解题思路
第十届CCF大数据与计算智能大赛(2022 CCF BDCI)已圆满结束,大赛官方竞赛平台DataFountain(简称DF平台)正在陆续释出各赛题获奖队伍的方案思路,欢迎广大数据科学家交流讨论。 本方案为【大规模金融图数据中…...
npm install 报错
npm install 报错 npm install 报错 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: yudao-ui-admin1.8.0-snapshot npm ERR! Found: eslint7.15.0 npm ERR! node_modules/eslint npm ERR! dev eslint&q…...
专业人士使用的3个好用的ChatGPT提示
AI正在席卷世界。从自动化各个领域的任务到几秒钟内协助我们的日常生活,它有着了公众还未理解的巨大价值……除非你是专业人士。 专业人士一般都使用什么提示以及如何使用的?这里是经验丰富的懂ChatGPT的专业人士才知道的3个提示。好用请复制收藏。 为…...
doris系列2: doris分析英国房产数据集
1.准备数据 2.doris建表 CREATE TABLE `uk_price_paid` (`id` varchar(50) NOT NULL,`price` int(20),`date` date...
精准运营,智能决策!解锁天翼物联水利水务感知云
面向智慧水利/水务数字化转型需求,天翼物联基于感知云平台创新能力,提供涵盖水利水务泛协议接入、感知云水利/水务平台、水利/水务感知数据治理、数据看板在内的水利水务感知云服务,构建水利水务感知神经系统新型数字化底座,实现智…...
CleanMyMac最新版4.14Mac清理软件下载安装使用教程
苹果电脑是很多人喜欢使用的一种电脑,它有着优美的外观,流畅的操作系统,丰富的应用程序和高效的性能。但是,随着时间的推移,苹果电脑也会产生一些不必要的文件和数据,这些文件和数据就是我们常说的垃圾。那…...
String.Format方法详解
在Java中,String.format() 方法可以用于将格式化的字符串写入输出字符串中。该方法将根据指定的格式字符串生成一个新的字符串,并使用可选的参数填充格式字符串中的占位符。以下是有关 String.format() 方法的更详细信息: 语法 public stati…...
【Mysql】关联查询1对多处理
关联查询1对多返回 遇见的问题 审批主表,和审批明细表,一张审批对应多张明细数据,每条明细数据的状态是不一样的,现在需要根据明细的状态获取到主单子的状态,状态返回矩阵如下 明细状态返回总状态都是已完成已完成都…...
vue 入门案例模版
vue 入门案例1 01.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> &l…...
el-select实现懒加载
先看一个线上的演示示例:https://code.juejin.cn/pen/7273352811440504889 背景 我们在实际开发中经常遇到这样的需求: el-select实现懒加载,用通俗的话说,为了增加响应速度,就是初始下拉只展示50条数据,…...
Java泛型机制
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:每天一个知识点 ✨特色专栏:…...
Linux CentOS安装抓包解包工具Wireshark图形化界面
1.Wireshark介绍 Wireshark 是一个开源的网络协议分析工具,它能够捕获和分析网络数据包,提供深入的网络故障排除、网络性能优化和安全审计等功能。它支持跨多个操作系统,包括 Windows、macOS 和 Linux。 2.Wireshark主要使用方法 捕获数据…...
虹科分享 | 温度边缘效应对冻干成品含水量的影响(下)——优化和总结
上一篇文章中介绍到借助虹科Ellab的温度记录仪观察到由于冻干机壁面温度的影响,形成的边缘效应导致同一隔板的不同区域冻干饼块的干燥程度不均匀,含水量不同。 06 初次试验结果: 二次干燥中的产品温度显示: 放置在搁板中间的产品…...
ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319)
安全之安全(security)博客目录导读 ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319) 二、CVE-2016-10319 一、ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319) Title 错误的固件更新SMC可能导致意外的大数据拷贝到安全内存中 CVE ID CVE-2016-10319 …...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
