微信小程序_小程序视图与逻辑_day3

news2024/11/14 8:50:19

一、目标

A. 能够知道如何实现页面之间的导航跳转
B. 能够知道如何实现下拉刷新效果
C. 能够知道如何实现上拉加载更多效果
D. 能够知道小程序中常用的生命周期

二、目录

A. 页面导航
B. 页面事件
C. 生命周期
D. WXS脚本
E. 案例-本地生活(列表页面)

三、页面导航

3.1 什么是页面导航

页面导航指的是页面之间的相互跳转。例如,浏览器中实现页面导航的方式有如下两种:
A. 链接
B. location.href

3.2 小程序中实现页面导航的两种方式

A. 声明式导航
在页面上声明一个导航组件,通过点击组件实现页面跳转

B. 编程式导航
调用小程序的导航API,实现页面的跳转

3.3 页面导航-声明式导航

3.3.1 导航到tabBar页面

tabBar页面指的是被配置为tabBar的页面在使用组件跳转到指定的tabBar页面时,需要指定url属性和open-type属性,其中:

A. url表示要跳转的页面的地址,必须以 / 开头
B. open-type表示跳转的方式,必须为switchTab
示例代码如下:

<navigator url="/pages/3link/3link" open-type="switchTab">
	跳转到[联系我们]
</navigator>

3.3.2 导航到非tabbar界面

非tabBar页面指的是没有被配置为tabBar的页面。
在使用组件跳转到普通的非tabBar页面时,则需要指定url属性和open-type属性,其中:
A. url表示要跳转的页面的地址,必须以/开头
B. open-type表示跳转的方式,必须为navigate
示例代码

<navigator url="/pages/4info/4info" open-type="navigate">
	跳转到[消息界面]
</navigator>

3.3.3 后退导航

如果要后退到上一页面或多级页面,则需要指定open-type属性和delta属性,其中:

A. open-type的值必须是navigateBack,表示要进行后退导航
B. delta的值必须是数字,表示要后退的层级

示例代码如下:

<navigator open-type="navigateBack" delta="1">后退【上一级】</navigator>

注意:为了方便,如果只是后退到上一页面,则可以省略delta属性,因为其默认值就是1

3.4 页面导航-编程式导航

3.4.1 导航到tabbar页面

调用wx.switchTab(Object object)方法,可以跳转到tabBar页面。其中Object参数对象的属性列表如下:
在这里插入图片描述

<button type="primary" bind:tap="goto">导航到【联系我们2】</button>
goto(){
	wx.switchTab({
		url: '/pages/3link/3link'
	})
},

3.4.2 导航到非tabbar页面

调用wx.navigateTo(Object object)方法,可以跳转到非tabBar的页面。其中Object参数对象的属性列表

属性:

在这里插入图片描述

<button type="warn" bind:tap="goto2">导航到【消息列表】</button>
goto2(){
	wx.navigateTo({
		url: '/pages/4info/4info',
	})
},

3.4.3 后退导航

调用wx.navigateBack(Object object)方法,可以返回上一页面或多级页面。其中Object参数对象可选的属性列表如下:

在这里插入图片描述

<button bind:tap="goback2">返回【上一级】</button>
goback2(){
	wx.navigateBack()
},

3.5 页面导航-导航传参

3.5.1 声明式导航传参

navigator组件的url属性用来指定将要跳转到的页面的路径。同时,路径的后面还可以携带参数:

A. 参数与路径之间使用?分隔
B. 参数键与参数值用=相连
C. 不同参数用&分隔

代码示例如下:

<navigator open-type="navigate" url="/pages/4info/4info?name=zs&age=18">
	声明式传参
</navigator>

在这里插入图片描述

3.5.2 编程式导航传参

调用wx.navigateTo(Object object)方法跳转页面时,也可以携带参数,代码示例如下:

<button bind:tap="goto3">编程式传参</button>
goto3(){
	wx.navigateTo({
		url: '/pages/4info/4info?name=ls&age=20',
	})
},

在这里插入图片描述

3.5.3 在onLoad中接收导航参数

通过声明式导航传参或编程式导航传参所携带的参数,可以直接在onLoad事件中直接获取到,示例代码如下:

/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
	//options就是导航传参过来的参数对象,返回的是一个对象
	console.log(options);
	//要把返回过来的数据放在data里面
	this.setData({
		user: options
	});
},

要把数据放在data里面,其它的方法可能被访问

四、页面事件-下拉刷新事件

4.1 什么是下拉刷新

下拉刷新是移动端的专有名词,指的是通过手指在屏幕上的下拉滑动操作,从而重新加载页面数据的行为。

4.2 启用下拉刷新

启用下拉刷新有两种方式:

A. 全局开启下拉刷新
在app.json的window节点中,将enablePullDownRefresh设置为true
B. 局部开启下拉刷新(推荐)
在页面的.json配置文件中,将enablePullDownRefresh设置为true
在实际开发中,推荐使用第二种方式,为需要的页面单独开启下拉刷新的效果

4.3 配置下拉刷新窗口的样式

在全局或页面的.json配置文件中,通过backgroundColor和backgroundTextStyle来配置下拉刷新窗口的样式,其中:

A. backgroundColor用来配置下拉刷新窗口的背景颜色,仅支持16进制的颜色值
B. backgroundTextStyle用来配置下拉刷新loading的样式,仅支持dark和light

在这里插入图片描述

4.4 监听页面的下拉刷新事件

在页面的.js文件中,通过onPullDownRefresh()函数即可监听当前页面的下拉刷新事件。例如,在页面的wxml中有如下的UI结构,点击按钮可以让count值自增+1;

页面结构:

<view>count:{{count}}</view>
<button type="primary" bind:tap="countAdd">+1</button>

js:

data: {
	count:0
},
countAdd(){
	this.setData({
		count:this.data.count+1
	});
},

在触发页面的下拉刷新事件的时候,如果要把count的值重置为0,示例代码如下:
.json
在这里插入图片描述
js

/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
	this.setData({
		count: 0
	})
},

4.5 停止下拉刷新

当处理完下拉刷新后,下拉刷新的loading效果会一直显示,不会主动消失,所以需要手动隐藏loading效果。此时,调用wx.stopPulldownRefresh()可以停止当前页面的下拉刷新。示例如下:

/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
	this.setData({
		count: 0
	})
	//当数据重置成功之后,调用此函数,关闭下拉刷新效果
	wx.stopPullDownRefresh()
},

五、上拉触底

5.1 什么是上拉触底

上拉触底是移动端的专有名词,通过手指在屏幕上的上拉滑动操作,从而加载更多数据的行为。

5.2 监听页面的上拉触底事件

在页面的.js文件中,通过onReachBottom()函数即可监听当前页面的上拉触底事件。示例代码如下:

/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
	console.log('已经触底了.......');
},

5.3 配置上拉触底距离

上拉触底距离指的是触发上拉触底事件时,滚动条距离页面底部的距离,可以在全局或局部的.json配置文件中,通过onReachBottomDistance属性来配置上拉触底的距离。
小程序默认的触底距离是50px,在实际开发中,可以根据自己的需求修改这个默认值。

六、生命周期

6.1 什么是生命周期

生命周期(Life Cycle)是指一个对象从创建->运行->销毁的整个阶段,强调的是一个时间段。例如:
A. 张三出生,表示这个人生命周期的开始
B. 张三离世,表示这个人生命周期的结束
C. 中间张三的一生,就是张三的生命周期

我们可以把每个小程序运行的过程,也概括为生命周期:
A. 小程序的启动,表示生命周期的开始
B. 小程序的关闭,表示生命周期的结束
C. 中间小程序运行的过程,就是小程序的生命周期

6.2 生命周期的分类

在小程序中,生命周期分为两类,分别是:

A .应用生命周期
特指小程序从启动->运行->销毁的过程
B .页面生命周期
特指小程序中,每个页面的加载->渲染->销毁的过程
其中,页面的生命周期范围较小,应用程序的生命周期范围较大,如图所示:

在这里插入图片描述

6.3 什么是生命周期函数

生命周期函数:是由小程序框架提供的内置函数,会伴随着生命周期,自动按次序执行。
生命周期函数的作用:允许程序员在特定的时间点,执行某些特定的操作。例如,页面刚加载的时候,可以在onLoad生命周期函数中初始化页面的数据
注意: 生命周期强调的是时间段,生命周期函数强调的是时间点

6.4 生命周期函数的分类

小程序中的生命周期函数分为两类,分别是:

A. 应用的生命周期函数
特指小程序从启动->运行->销毁期间依次调用的那些函数
B. 页面的生命周期函数
特指小程序中,每个页面从加载->渲染->销毁期间依次调用的那些函数

6.5 应用的生命周期函数

小程序的应用生命周期函数需要在app.js中进行申明,示例代码如下:
在这里插入图片描述

6.6 页面的生命周期函数

小程序的页面生命周期函数需要在页面的.js文件中进行生命,示例代码如下:

Page({
	onLoad:function (options){}, //监听页面加载,一个页面只调用一次
	onShow:function (){},        //监听页面显示
	onReady:function (){},       //监听页面初次渲染完成,一个页面只调用一次
	onHide:function (){},        //监听页面隐藏
	onUnload:function (){}       //监听页面卸载,一个页面只调用一次
})

七、wxs脚本-概述

7.1 什么是wxs

WXS(WeiXin Script)是小程序独有的一套脚本语言,结合WXML,可以构建出页面的结构。

7.2 wxs的应用场景

wxml中无法调用在页面的.js中定义的函数,但是,wxml中可以调用wxs中定义的函数。因此,小程序中wxs的典型应用场景就是“过滤器”。

7.3 wxs和js的关系

虽然wxs的语法类似于JS,但是wxs和js是完全不同的两种语言:

A. wxs有自己的数据类型
number数值类型、string字符串类型、boolean布尔类型、object对象类型、function函数类型、array数组类型、date日期类型、 regexp正则

B.wxs不支持类似于ES6及以上的语法形式
不支持:let、const、解构赋值、展开运算符、箭头函数、对象属性简写、etc
支持:var 定义变量、普通function函数等类似于ES5的语法

C. wxs遵循CommonJS规范
module对象
require()函数
Module.exports对象

7.4 wxs脚本-基础语法

7.4.1 内嵌wxs脚本

WXS代码可以编写在wxml文件中的标签内,就像JS代码可以编写在html文件中的标签内一样。wxml文件中的每个标签,必须提供module属性,用来指定当前wxs的模块名称,方便在wxml中访问模块中的成员

<view>~~~~~~~~~~~wxs~~~~~~~~~~~</view>
<view>信息:{{m1.message}}</view>
<view>转化为大写:{{m1.toUpper('zhangsan')}}</view>
<wxs module="m1">
	//静态展示文本
	var msg = "hello world!!!!!!!!"
	module.exports.message=msg;
	//函数
	module.exports.toUpper=function (str){
		return str.toUpperCase();
	}
</wxs>

在这里插入图片描述

7.4.2 定义外联的wxs脚本

wxs代码还可以缩写在以.wxs为后缀名的文件内,就像JS代码可以编写在以.js为后缀名的文件中一样。

示例代码如下:
在这里插入图片描述

7.4.3 使用外联的wxs脚本

在wxml中引入外联的wxs脚本时,必须为标签添加module和src属性,其中

A. module用来指定模块的名称
B. src用来指定要引入的脚本的路径,且必须是相对路径

示例代码如下:

<view>外部的wxs:{{m2.toUpper2('lisi')}}</view>
<wxs src="./tool.wxs" module="m2"></wxs>

7.5 wxs脚本-wxs的特点

7.5.1 与js不同

为了降低wxs(WeiXin Script)的学习成本,wxs语言在设计时借大量鉴了JS的语法。但是本质上,wxs和JS是完全不同的两种语言!

7.5.2 不能作为组件的事件回调

wxs典型的应用场景就是“过滤器”,经常配合Mustache语法进行使用,例如:

<view>转化为大写:{{m1.toUpper('zhangsan')}}</view>

但是,在wxs中定义的函数不能作为组件的事件回调函数。例如,下面的用法是错误的:

<button bind:tap="m1.toUpper">按钮</button>

7.5.3 隔离性

隔离性指的是wxs的运行环境和JS代码是隔离的。体现如下两方面:
A . wxs不能调用js中定义的函数
B .wxs不能调用小程序提供的API

7.5.4 性能好

A. 在IOS设备上,小程序内的WXS会比JS代码快2-30倍
B. 在android设备上,二者的运行效率无差异

八、案例

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Threejs 材质贴图、光照和投影详解

1. 材质和贴图 材质&#xff08;Material&#xff09;定义了物体表面的外观&#xff0c;包括颜色、光泽度、透明度等。贴图&#xff08;Textures&#xff09;是应用于材质的图像&#xff0c;它们可以增加物体表面的细节和真实感。 1.1材质类型 MeshBasicMaterial&#xff1a…

论文概览 |《Sustainable Cities and Society》2024.11 Vol.115(下)

本次给大家整理的是《Sustainable Cities and Society》杂志2024年11月第115期的论文的题目和摘要&#xff0c;一共包括76篇SCI论文&#xff01;由于论文过多&#xff0c;我们将通过两篇文章进行介绍&#xff0c;本篇文章介绍第31--第76篇论文! 论文31 The effect of urban fo…

【问卷调研】HarmonyOS SDK开发者社区用户需求有奖调研

问卷请点击&#xff1a;HarmonyOS SDK开发者社区用户需求有奖调研

【3D Slicer】的小白入门使用指南五

心脏CT多组织半自动分割(解说版) 模块勾选的是converters下的crop volume 右侧移动滑块+移动边框,移动位置找到自己关注的区域即可,然后点击apply(其他参数也要设置的和图片一致) 模块勾选segment editor,并创建心脏多个不同分割位置(默认下不同位置自动分配了不同的颜…

丹摩征文活动|FLUX.1 和 ComfyUI:从部署到上手,轻松驾驭!

FLUX.1 和 ComfyUI&#xff1a;从部署到上手&#xff0c;轻松驾驭&#xff01; FLUX.1历史曲线 黑森林实验室推出了一款名为FLUX.1的先进图像生成模型&#xff0c;根据不同用户需求&#xff0c;提供了三种独特的版本。 FLUX.1-pro&#xff1a;作为专为企业打造的强大闭源版本…

自动驾驶合集(更新中)

文章目录 车辆模型控制路径规划 车辆模型 车辆模型基础合集 控制 控制合集 路径规划 规划合集

string------1

文章目录 一. STL1.概念2.版本 二. string类2.1 为什么学习string类2. 标准库中的string类2.2.1 构造&#xff08;7个&#xff09;2.2.2 对string类对象进行“访问和修改”&#xff08;1&#xff09;operator[]&#xff08;2&#xff09;迭代器1.迭代器的使用2.迭代器的价值&am…

开源 2 + 1 链动模式、AI 智能名片、S2B2C 商城小程序在用户留存与品牌发展中的应用研究

摘要&#xff1a;本文以企业和个人品牌发展中至关重要的用户留存问题为切入点&#xff0c;结合管理大师彼得德鲁克对于企业兴旺发达的观点&#xff0c;阐述了用户留存对品牌营收的关键意义。在此基础上&#xff0c;深入分析开源 2 1 链动模式、AI 智能名片、S2B2C 商城小程序在…

蓝桥杯每日真题 - 第8天

题目&#xff1a;&#xff08;子2023&#xff09; 题目描述&#xff08;14届 C&C B组A题&#xff09; 解题思路&#xff1a; 该代码通过动态计算包含数字 "2023" 的子序列出现次数。主要思路是&#xff1a; 拼接序列&#xff1a;将1到2023的所有数字按顺序拆分…

Mac Nginx 前端打包部署

安装homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装Nginx brew install nginx nginx相关命令 nginx启动命令&#xff1a;nginx nginx -s reload #重新加载配置 nginx -s reopen #重启 nginx -s stop #…

小试银河麒麟系统OCR软件

0 前言 今天在国产电脑上办公&#xff0c;需要从一些PDF文件中复制文字内容&#xff0c;但是这些PDF文件是图片转换生成的&#xff0c;不支持文字选择和复制&#xff0c;除了手工输入&#xff0c;我们还可以使用OCR。 1 什么是OCR OCR &#xff08;Optical Character Recogni…

选择主动孤独,亦可以成长和放松

有的人热衷于喧嚣&#xff0c;享受来自社交场合的灯火辉煌&#xff0c;将欢声笑语作为心灵的慰藉。有的人则偏爱那份宁静&#xff0c;更愿意在青灯古巷间徘徊&#xff0c;在山川湖海间独行&#xff0c;以一杯茶、一卷书、一段旅程与自我对话。每个人以不同的方式诠释活着的意义…

Django 外键引用另一个表中的多个字段

在 Django 中&#xff0c;外键&#xff08;ForeignKey&#xff09;通常只引用另一张表的一个字段&#xff0c;比如一个主键或一个唯一标识字段。然而&#xff0c;如果我们需要让一个外键引用另一张表中的多个字段&#xff0c;通常有以下几种方法来实现这种关系。 1、问题背景 …

MyBatis从入门到进阶

目录 MyBatis入门1、创建项目、数据准备2、数据库配置3、编写持久层代码单元测试打印日志 基本操作查询数据插入数据删除数据更新数据 MyBatis - xml插入数据更新数据删除数据查询数据#{}与${}SQL注入排序like查询 MyBatis进阶if标签trim标签where标签set标签foreach标签sql标签…

【JavaWeb】JavaWeb入门之XML详解

目录 1.XML介绍 1.1.XML概述 1.1.1.什么是XML 1.1.2.XML的作用 1.1.3.XML与HTML的比较 1.1.4.XML和properties&#xff08;属性文件&#xff09;比较 1.1.5.W3C组织 1.2.XML语法概述 1.2.1.XML文档展示 1.2.2.XML文档的组成部分 1.3.XML文档声明 1.3.1.什么是XML文…

wordcloud库基本介绍

文章目录 wordcloud库概述wordcloud库的安装 wordcloud库使用说明配置对象参数 wordcloud应用实例实例: 政府工作报告词云 wordcloud库概述 wordcloud是优秀的词云展示第三方库 词云以词语为基本单位,更加直观和艺术地展示文本 wordcloud库的安装 (cmd命令行) pip install …

VMware和CentOS 7.6 Linux操作系统的安装使用

1. 安装VMware 安装VMware之前&#xff0c;有些电脑是需要去BIOS里修改设置开启cpu虚拟化设备支持才能安装。如果运气不好在安装过程中安装不了的话就自行百度吧。 打开 VMware 的官网: https://www.vmware.com/ 点击 product&#xff0c;往下滑找到 see desktop hypeerviso…

LLM在Transformer上的改动

LLM在Transformer上的改动 1.multi-head共享1.1BERT的逻辑1.2multi-head共享 2.attention的前后网络2.1传统Transformer&#xff1a;2.2GPTJ结构&#xff1a; 3.归一化层的位置&#xff08;LayerNorm&#xff09;4.归一化层函数的选择4.1LayerNorm4.2RMSNorm 3.激活函数4.LLama…

解决SpringBoot3的Validated依赖实现自定义注解失效问题

我们引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency> Validated实现自定义注解 我们首先看看自定义注解里面&#xff0c;用到的注解的包 我们…

当微软windows的记事本被AI加持

1985年&#xff0c;微软发布了Windows 1.0&#xff0c;推出了一款革命性的产品&#xff1a;记事本&#xff08;Notepad&#xff09;。这款软件旨在鼓励使用一种未来主义的新设备——鼠标&#xff0c;并让人们可以不依赖VI等键盘工具就能书写文本和编写代码。记事本因其简洁和高…