首页 > 编程语言 >小程序4

小程序4

时间:2022-11-16 18:03:24浏览次数:62  
标签:函数 wxs 程序 上拉 跳转 导航 页面

试图与逻辑

学习目标:

  • 1.能够知道如何实现页面之间的跳转
  • 2.能够知道如何实现下拉刷新的效果
  • 3.能够知道如何实现上拉刷新的效果
  • 4.能够知道小程序中尝试用的生命周期函数

页面导航

什么是页面导航?

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

  • 1.<a>链接
  • 2.location.href

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

  • 声明式导航
    • 在页面上声明一个导航组件
    • 通过点击组件实现页面的跳转
  • 编程式导航
    • 调用小程序的导航API,实现页面的跳转
声明式导航到tabBar页面

tabBar页面是指被配置为tabBar的页面。如,设置了三个页面,都集中在tabBar上,我们可以在其中一个页面,通过点击进而跳转到另一个页面。
在使用组件跳转到指定的tabBar页面时,需要指定url属性和open-type属性,其中:

  • url表示要跳转的页面地址,必须以/开头
  • open-type表示跳转的方式,必须为switchTab(当是需要跳转到tabBar页面时),代码示例:
    <navigator url="/pages/message/message" open-type="switchTab">导航到消息页面</navigator>
声明式导航到tabBar页面

使用声明式导航跳转到非tabBar页面(就是不被定义为tabBar的页面)

  • url表示要跳转的页面地址,必须以/开头
  • open-type表示跳转的方式,必须为navigator(当是需要跳转到tabBar页面时),代码示例:
    <navigator url="/pages/info/info" open-type="navigator">导航到info页面</navigator>
声明式后退导航

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

  • open-type的值必须是navigateBack,表示要进行后退导航
  • delta的值必须是数字,表示要后退的层级代码示例:
    返回上一级
    注意:为了简便,如果之上返回上一级,则可以可以省略delta属性,因为默认值就是1
编程式导航跳转到tabBar页面

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

代码示例:

编程式导航跳转到非tabBar页面

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

代码示例:

编程式后退导航

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

代码示例:

导航传参

声明式导航传参

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

  • 参数、路径之间使用?分隔
  • 参数键、参数值用=项链
  • 不同参数用&分隔代码示例:
    <navigator url="/pages/info/info?name=张三&age=21">跳转页面</navigator>
    其中,name、age为参数,用&分隔,?代表要传递参数;在跳转的同时进行传参
编程式导航传参

绑定事件,出发函数,调用方法wx.navigateTo(Object object),参数书写位置格式上面相同的,与路径一并书写

如何在onLond中接收导航参数

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

用形参options接受数据,结果:

接受了数据之后,这个options只能在onLoad范围中接受访问;为了能够让其他的函数也能访问到传递过来的参数,则就需要让options中的数据变为一个可被公共访问的数据;这就需要将数据存储在跳转页面的date节点当中所以需要在date节点中定义一个变量query,这个query指向一个空对象,用于接收options的参数;接受的方法就是,在onLoad函数中利用this.setDate方法把options赋值给query(这与前面学的接收参数是同理的)

页面事件

下拉刷新

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

如何启用下拉刷新
  • 全局开启下拉刷新
    • 在app.json的window节点中,将enablePullDownRefresh设置为true
  • 局部开启下拉刷新
    • 在页面的.json配置文件中,将enablePullDownRefresh设置为true
如何配置下拉刷新窗口样式

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

  • backgroundColor用来配置下拉刷新后才能港口的背景颜色,仅支持16进制的颜色值
  • backgroundTextStyle来配置下拉刷新loading的样式,仅支持dark(双色闪)和light
如何监听下拉刷新事件

在页面的.js文件中,通过onPullDownRefresh()函数即可监听当前页面的下拉刷新事件。
就是只要发生下拉刷新这个事件,就会触发onPullDownRefresh()这个函数
我们可以利用onPullDownRefresh()来做一些小练习:我们设置一个按钮和一个count值,按下按钮count值就会加1,下拉刷新后,count值就恢复到0

如何停止下拉刷新的效果

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

上拉触底事件

上拉触底是移动端的专有名词,通过手指在屏幕上的上拉滑动操作,从而加载更多数据的行为
不过在实际项目中,上拉触底一般实现的是数据的分页功能()

如何监听某个页面的上拉触底时间

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

实际操作中可能会出现用户多次发出上拉请求;而且系统本身会默认再次发出请求;所以实际开发中我们要注意两点:

  • 在onReachBottom()中做节流处理:首先同一时间只能发出一次请求
  • 且上一个请求未完成之前,上拉请求无效
配置上拉触底的距离

上拉触底距离指的是出发上拉触底时间时,滚动条距离页面底部的距离。默认是50,就是说,当滚动条距离底部还有50px时就触发上拉事件
可以在全局或页面的.json配置文件中,通过onReachBottomDistance属性来配置上拉触底的距离

上拉触底案例

  • 1.定义获取随机颜色的方法
  • 2.在页面加载时获取初始数据
  • 3.渲染UI结构并梅花页面效果
  • 4.在上拉触底时调用获取随机颜色的方法
  • 5.添加loading效果
  • 6.对上拉触底进行节流处理(多余请求不发送;前一个请求不完成不发送)

    ...是展开运算符

如何在上拉触底是获取随即样式

在上面的学习中,是通过网络数据请求获取不同的颜色,而后再通过上拉触底进而不断的调用这个网络请求的函数;由于版本的问题,没有用到网络请求的函数。而是通过,绑定循环事件,将这个循环事件的行为设置为数组拼接(利用展开运算符),而后在onReachBottom()函数中调用这个函数,以达到添加新页面的效果;从最开始colorList元素数量为10,到多次触发上来触底事件而新增为40个元素。colorList与colorList1最开始是相同的,由于colorList一直在增加,而要求其每次的增加值不变,故让其每次增加数组colorList1,而不是自己本身。结果如下:

如何添加loading提示效果


通过wx.showLoading显示 loading 提示框。需主动调用wx.hideLoading才能关闭提示框

如何对上拉触底进行截留处理

**节流处理,就是为了解决用户多次上拉发送多次请求;进而做到:

  • 同一时间只能发出一次请求
  • 且上一个请求未完成之前,上拉请求无效

如果当前正在请求下一页的数据,我们就需要将后续所有的请求屏蔽掉;如果当前没有请求任何数据,才允许发起下一页的请求
步骤:

  • 在data 中定义isloading节流阀
    1.false表示当前没有进行任何的数据请求
    2.true表示当前正在进行数据请求
  • 在getColors()方法中修改isloading节流阀的值
    1.在公i盗用getColors时将节流阀设置为true
    2.在网络请求complete回调函数中,讲解六阀重置为false
  • 在onReachBottom中判断节流阀的值,从而对数据请求进行节流控制
    1.如果节流阀的值为true,则组织当前请求
    2.如果节流阀的值为false,则发起数据请求

我们可以看到,一旦发生上拉触底,isloading的值就发生了变化;当然我完成的过程中,我们有发送数据请求,所以isloading值的转换是很快的;但在实际项目中,如果是发送网络请求,这个值的转化是依据网速的;这样就能实现节流

自定义编译模式

每次编译之后,都跳转到挨批评.jsondate首个文件路径;自定义编译过后,就可以让每次编译都跳转到当前编译页面

  • 1.在普通编译中选择添加编译模式
  • 2.再启动页面中选择每次编译后启动的页面
  • 3.我们可以为模式定义名称
  • 4.可以传递启动参数

生命周期

生命周期指的是一个对象从创建->运行->销毁的整个阶段,强调的是一个时间段。例如:

  • 张三出生,是生命周期的开始
  • 张三离世,是生命周期的结束
  • 张三的一生,就是张三的生命周期

小程序的运行过程,也可以概括为生命周期:

  • 小程序的启动,生命周期的开始
  • 小程序的关闭,生命周期的结束
  • 运行过程,就是生命周期

生命周期的分类

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

  • 应用生命周期
    特质小程序从启动-运行-销毁的过程
  • 页面生命周期
    特指小程序中,每个页面的加载-渲染-销毁的过程

其中,页面的生命周期范围较小,应用程序的生命周期范围较大:
小程序启动——页面A的生命周期——页面B的生命周期——etc...——小程序结束

生命周期函数

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

生命周期函数分类

  • 应用的生命周期函数
    特质小程序从启动——运行——销毁期间依次调用的那些函数
  • 页面生命周期函数
    特指页面从加载——渲染——销毁需要依次调用的函数

应用的生命周期函数

小程序的应用生命周期函数需要在app.js中进行声明
APP函数框架自动生成onLaunch、onShow、onHide函数;onLaunch函数一般用于整个程序的数据初始化(比如会从本地存储中读取一些数据,然后加载到小程序里面;所以读取本地数据的代码就可以写在onlaunch函数中)
onShow、onHide函数:

先了解以下后台、前台的概念:
处于小程序页面时,就是前台;未关闭而是切换到其他应用,就是后台
,而这两个函数,就是在小程序在两个状态下转换时所会触发的函数

页面的生命周期函数

小程序的页面生命周期函数需要在页面的.js文件中声明
在Page函数中声明五个生命周期函数
onLoad:监听页面加载(初始化页面数据,转存页面携带的参数)
onReady:监听页面初次渲染完成(比如页面标题的修改,利用wx.setNavigationBarTitle())
onShow:监听页面显示
onHide:监听页面隐藏
onUnload:监听页面卸载

WXS脚本

WXS

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

wxs的应用场景

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

wxs与javaScript的关系

虽然说wxs的语法类似于javaScript,但是wxs与javaScript是完全不同的两种语言:

  • wxs有自己的数据类型
    number:数值类型、string:字符串类型、boolean:布尔类型、object:对象类型
    function:函数类型、array:数组类型、date:日期类型、regexp:正则
  • wxs不支持类似于ES6及以上的语法形式
    不支持:let、const、解构赋值、展开运算符、箭头函数、对象属性简写、ect...
    支持:var定义变量、普通function函数等类似于ES5的语法
  • wxs遵循CommonJS规范
    module对象
    require()函数,通过这个函数导入模块对象
    module.exports()对象,对外共享成员

wxs脚本基本语法

内嵌wxs脚本

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

比如,我们定义了一个方法,在一个名为m1的模块中,将这个方法共享到外面;那么外界就可以调用这个方法;
通过:模块名.模块中方法名(参数);就可以调用这个方法
特别注意:调用模块时的方法名,下面写的是toUpper,而不是toUpperCase

结果:

外联wxs脚本代码编写

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

如何使用外联式wxs脚本

在wxml中引入wxs脚本时,必须标签添加modulescr属性,其中:
1.module属性用来指定模块的名称
2.src用来指定要引入的脚本路径,且必须是相对路径


结果:

wxs的特点

与JavaScript不同

1.为了减低学习成本,wxs语言在设计上大量借鉴了JavaScript的语法。但是本质上,wxs和JavaScript是完全不同的两种语言
2.必能作为组建的事件回调:首先,wxs典型的应用场景就是过滤器经常配合Mustache语法进行使用,例如:上面案例用到的调用模块中函数的语句;但是在wxs中定义的函数不能作为组建的事件回调函数,例如:<button bindtap="m2.toLower">按钮</button>
3.隔离性:指的是,wxs的运行环境和其它JavaScript代码是隔离的。体现在如下两个方面:1.wxs不能调用js文件中所调用的函数;2.wxs不能调用小程序中的API
4.性能好:在ios设备上,小程序内的WXS会比JavaScript代码快2~20倍;在android设备上,两者无差异

案例-本地生活(列表页面)

1.演示效果及其功能:

  • 页面导航并传参
  • 上拉触底施加在下一页数据
  • 下拉刷新列表

1.创建商铺列表页面
2.将九宫格的每一项都改造成为navigator组件
3.点击项的名称传递到商铺列表页面的标题
4.点击项的id也要传进去,为的是能够显示特定的列表

(1)导航跳转和传参

1.创建商铺列表页面
2.将九宫格每一项改造为navigator组件(支持跳转行为)
3.给navigator添加url属性,添加跳转路径,以及传递参数id和标题名称

(2)动态设置页面标题

这时不能在shoplist.json文件中设置navigationBarTitleText了,否则就把标题设置死了
wx.setNavigationBarTitle():动态设置页面的标题(通过调用API)

思考:标题动态设置的时机,就是页面刚刚加载的时候;因此可以在合适的页面生命周期函数中调用API
wx.setNavigationBarTitle()在onReady函数中调用
onLoad()函数是用于接收页面参数而我们知道,函数的形参是由作用域的只能在函数的范围内;而在这个页面中我们还需要其他函数(onReady()函数)调用这些参数,所以我们在date中定义变量,存储这些参数以供其他函数使用

列表页面的API接口

1.分页的形式,加载自定分类下商铺列表的数据:
(要加载的数据,存放在网络上,需要用API接口获取)接口地址:(一般根据自己的网站获取,格式如下)

  • https://www.escook.cn/categories/:cate_id/shops
  • url地址中的:cate_id是动态参数,表示分类的id
    2.请求方式:GET
    3.请求参数:
  • _page表示请求第几页的数据
  • _limit表示每页请求几条数据

如何判断下一页是否还有数据

页码值每页显示多少条数据>=总数据条
page
pageSize>=total


当没有数据时,再次触发上拉事件,需要显示提示框提示用户,利用wx.showToast(Object object)
属性值title意为提示的文本内容,icon(success)意为提示图标一个对勾,不展示图标为none

开启下拉刷新

在页面.json文件,添加配置节点enablePullDownRefresh属性值设置为true
注意:下拉刷新以后,不仅仅要定义一些函数,还要特别注意一些关键数据的重置,比如,pageNum,数组当中的元素数

补充回到函数概念。

对手机号的处理

将123456修改为12-345-6的形式,通过wxs(过滤器)进行处理

标签:函数,wxs,程序,上拉,跳转,导航,页面
From: https://www.cnblogs.com/hezhipeng/p/16884360.html

相关文章

  • 微信小程序: 子view的tap触发了父view的tap
    1、当子视图有事件,父也有事件tap,如何解决冲突。以下是代码:  子视图:1、catchtap2、hover-stop-propagation="true"这样就可以了,其它的不需要修改。 参考:https......
  • uniapp 微信小程序 配置分享朋友和朋友圈
    uniapp微信小程序配置分享朋友和朋友圈首先在小程序中配置微信分享,和微信朋友圈,onShareAppMessage,onShareTimeline这两个API和onLoad同级目录配置在小程序每个......
  • QT 应用程序执行 Linux 指令,以操作 I2c tools 读写举例
    头文件:#include<string.h>#include<QProcess>#include<QDebug>#include<QString>写数据到I2c:voidwriteData(uint8_tdata){QProcessp;//声明......
  • go语言实现第一个程序-hello,world!
    0.前言工作中一直使用c++编写高并发服务器程序,但c++编写高并非服务器程序时多线程逻辑,锁机制导致的死锁,内存泄漏,崩溃等问题会耗费大量时间和精力。听同事说go语言是专门做......
  • 使用windows切换程序窗口时关闭edg的多个选项卡
    关闭edg浏览器切换程序窗口时展示多个选项卡一、切换程序窗口的方式当使用电脑打开了多个程序时,可以通过按住快捷键alt+tab(或者使用笔记本的触控屏,三指左右滑动快捷手势)......
  • Qt中openssl配置,提示OPENSSL_Applink错误(程序异常退出错误)
    首先在QTcreater创建的QT工程中配置静态库和头文件1、LIBS+=-L"E:\OpenSSL-Win32\lib"-llibcryptoLIBS+=-L"E:\OpenSSL-Win32\lib"-llibsslINCLUDEPATH+=$$quote......
  • 打包python为应用程序
    python第三方库安装工具pip的安装:pip:  AtoolforinstallingandmanagingPythonpackages.要用到第三方包,python的版本就必须是2.7https://pypi.python.org/pypi/s......
  • WeChat:新建微信小程序
    1、修改app.js//app.jsApp({onLaunch(){//登录wx.login({success:res=>{//发送res.code到后台换取openId,sessionKey,unionI......
  • 【FFH】Bearpi-HM-Micro开机自启动程序
    (目录)1.前言项目开发需要联网传输数据,每次开机都要事先运行WiFi程序。于是想办法能不能板子开机的时候就能自动启动运行WiFi程序,不需要每次都命令行输入。2.开发例程2.......
  • Notion 程序猿必备笔记软件
      我发现工作时间比较久的人,都会逐渐养成记笔记的习惯,我也是,我之前已经使用国内某云笔记8年之久,而且是多年的会员。但我今天要给大家推荐另一款笔记软件——​​Notion​......