微信小程序 - 视图与逻辑 介绍-程序员宅基地

技术标签: 微信小程序  小程序  

视图与逻辑

一、页面导航

  1. 什么是页面导航

在小程序开发中,页面导航是指在不同页面之间进行切换的过程。通过页面导航,用户可以在小程序中流畅地浏览不同的内容和功能模块。

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

在小程序中,实现页面导航有两种主要方式:声明式导航和编程式导航。

1、页面导航 - 声明式导航

声明式导航是通过在页面的配置中声明导航信息来实现的,开发者只需在页面的配置文件中定义导航相关的信息,小程序框架会自动处理导航逻辑。

1.1 导航到tabBar页面

在声明式导航中,可以通过使用 <navigator> 组件来实现导航到tabBar页面,使用 open-type='switchTab' 来切换到底部导航栏的页面。

<!-- pageA.wxml -->
<navigator url='/pages/tab1/index' open-type='switchTab'>导航到Tab 1页面</navigator>
1.2 导航到非tabBar页面

同样,在声明式导航中,可以使用 <navigator> 组件来导航到非tabBar页面。

<!-- pageB.wxml -->
<navigator url='/pages/otherPage/index'>导航到其他页面</navigator>
1.3 后退导航

声明式导航也支持后退导航,用户可以通过系统的返回按钮或手势返回上一页面。

<!-- pageC.wxml -->
<navigator open-type='navigateBack'>后退导航</navigator>

2、页面导航 - 编程式导航

编程式导航是通过调用小程序框架提供的API来实现页面导航,开发者可以在代码中灵活控制导航逻辑。

2.1 导航到tabBar页面

与声明式导航类似,编程式导航也允许开发者通过调用API导航到tabBar页面。

// pageA.js
wx.switchTab({
    
  url: '/pages/tab1/index'
});
2.2 导航到非tabBar页面

编程式导航同样支持导航到非tabBar页面,开发者可以在代码中指定跳转的页面路径。

// pageB.js
wx.navigateTo({
    
  url: '/pages/otherPage/index'
});
2.3 后退导航

通过编程式导航,开发者可以实现更精细的后退导航控制,例如在特定条件下执行后退操作。

// pageC.js
wx.navigateBack({
    
  delta: 1
});

3、页面导航 - 导航传参

在开发过程中,有时候需要在不同页面之间传递参数。页面导航支持导航传参,分为声明式导航和编程式导航两种方式。

3.1 声明式导航传参

通过在页面路径中配置参数,实现声明式导航时可以传递参数给目标页面。

<!-- pageD.wxml -->
<navigator url='/pages/paramPage/index?param1=value1&param2=value2'>带参数导航</navigator>
3.2 编程式导航传参

在编程式导航中,开发者可以通过API调用传递参数给目标页面。

// pageE.js
wx.navigateTo({
    
  url: '/pages/paramPage/index?param1=value1&param2=value2'
});
3.3 在 onLoad 中接收导航参数

在目标页面的 onLoad 生命周期中,可以通过获取参数对象来获取传递过来的导航参数。

// paramPage.js
Page({
    
  onLoad: function(options) {
    
    console.log(options.param1); // 输出: value1
    console.log(options.param2); // 输出: value2
  }
});

以上是关于小程序中页面导航的基本介绍,下一节将深入讨论页面事件的处理方式。

二、页面事件

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

1.1 什么是下拉刷新

下拉刷新是一种用户在页面顶部向下滑动时触发的事件,通常用于实现页面的数据更新或重新加载。

1.2 启用下拉刷新

要启用下拉刷新功能,需要在页面配置文件中设置 enablePullDownRefreshtrue

// pageA.json
{
    
  "navigationBarTitleText": "Page A",
  "enablePullDownRefresh": true
}

除了在页面配置中开启全局下拉刷新,还可以在页面中使用 <scroll-view> 组件实现局部的下拉刷新。在 <scroll-view> 组件中设置 bindscrolltoupper 事件监听滚动到顶部时触发的下拉刷新。

<!-- pageB.wxml -->
<scroll-view bindscrolltoupper="onPullDownRefresh" style="height: 100vh;">
  <!-- 页面内容 -->
</scroll-view>
1.3 配置下拉刷新窗口的样式

可以通过在页面配置中设置 backgroundTextStylebackgroundColor 来配置下拉刷新窗口的样式。

// pageA.json
{
    
  "navigationBarTitleText": "Page A",
  "enablePullDownRefresh": true,
  "backgroundTextStyle": "dark",
  "backgroundColor": "#f8f8f8"
}
1.4 监听页面的下拉刷新事件

在页面的逻辑文件中,通过监听页面的 onPullDownRefresh 事件来监听下拉刷新的操作。

// pageA.js
Page({
    
  onPullDownRefresh: function() {
    
    // 执行下拉刷新的逻辑
    console.log("下拉刷新事件触发");
  }
});
1.5 停止下拉刷新的效果

在下拉刷新的逻辑执行完毕后,需要调用 wx.stopPullDownRefresh() 来停止下拉刷新的效果。

// pageA.js
Page({
    
  onPullDownRefresh: function() {
    
    // 执行下拉刷新的逻辑
    console.log("下拉刷新事件触发");

    // 停止下拉刷新的效果
    wx.stopPullDownRefresh();
  }
});

2、页面事件 - 上拉触底事件

2.1 什么是上拉触底

上拉触底是一种用户在页面底部向上滑动时触发的事件,通常用于实现分页加载更多数据。

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

在页面的逻辑文件中,通过监听页面的 onReachBottom 事件来监听上拉触底的操作。

// pageA.js
Page({
    
  onReachBottom: function() {
    
    // 执行上拉触底的逻辑
    console.log("上拉触底事件触发");
  }
});
2.3 配置上拉触底距离

可以通过在页面配置中设置 onReachBottomDistance 来配置上拉触底的距离,即当距离底部指定距离时触发上拉触底事件。

// pageA.json
{
    
  "navigationBarTitleText": "Page A",
  "onReachBottomDistance": 50
}

以上是关于小程序中页面事件的详细介绍,全局和局部下拉刷新的使用方式,以及上拉触底事件的监听和配置。下一节将讨论页面的生命周期。

三、生命周期

1、什么是生命周期

生命周期是指一个小程序从被创建到被销毁的整个过程。在这个过程中,小程序会经历不同的阶段和事件,开发者可以通过生命周期函数来执行相应的逻辑操作。

2、生命周期的分类

小程序的生命周期可以分为两类:应用生命周期和页面生命周期。

  • 应用生命周期: 小程序整体的生命周期,包括小程序的启动、前台运行、后台运行和销毁。

  • 页面生命周期: 单个页面的生命周期,包括页面的加载、显示、初次渲染、再次渲染、隐藏和卸载。

3、什么是生命周期函数

生命周期函数是在特定时机会被自动触发的函数,开发者可以在这些函数中编写相应的逻辑代码。在小程序中,生命周期函数包括应用生命周期函数和页面生命周期函数。

4、生命周期函数的分类

4.1 应用生命周期函数
  • onLaunch(options): 当小程序启动时触发,全局只触发一次。

  • onShow(options): 当小程序进入前台显示状态时触发。

  • onHide(): 当小程序进入后台状态时触发。

4.2 页面生命周期函数
  • onLoad(options): 当页面加载时触发,一次生命周期中只会触发一次。

  • onShow(): 当页面显示时触发。

  • onReady(): 当页面初次渲染完成时触发。

  • onHide(): 当页面隐藏时触发。

  • onUnload(): 当页面卸载时触发。

5、应用的生命周期函数

应用的生命周期函数是指在整个小程序运行过程中会被触发的函数,可以在 app.js 文件中定义。

// app.js
App({
    
  onLaunch: function(options) {
    
    // 小程序启动时触发
  },
  onShow: function(options) {
    
    // 小程序进入前台时触发
  },
  onHide: function() {
    
    // 小程序进入后台时触发
  }
});

6、页面的生命周期函数

页面的生命周期函数是指在页面加载、显示、渲染和卸载等不同阶段会被触发的函数,可以在每个页面的 pageX.js 文件中定义。

// pageA.js
Page({
    
  onLoad: function(options) {
    
    // 页面加载时触发
  },
  onShow: function() {
    
    // 页面显示时触发
  },
  onReady: function() {
    
    // 页面初次渲染完成时触发
  },
  onHide: function() {
    
    // 页面隐藏时触发
  },
  onUnload: function() {
    
    // 页面卸载时触发
  }
});

以上是关于小程序生命周期的基本介绍,开发者可以根据实际需求在不同的生命周期函数中编写相应的业务逻辑。

四、WXS脚本

1、WXS 脚本 - 概述

1.1 什么是 wxs

WXS(WeiXin Script)是小程序的一种脚本语言,用于在 WXML 中对数据进行逻辑处理。它类似于 JavaScript,但有一些特定的语法和限制。

1.2 wxs 的应用场景

WXS 主要用于处理小程序页面中的逻辑,例如数据的计算、处理字符串等。它可以被用在 WXML 中进行数据绑定和逻辑运算。

1.3 wxs 和 JavaScript 的关系*

WXS 与 JavaScript 有相似之处,但并不完全相同。WXS 主要用于小程序,它的语法和能力受到一些限制,使其更适合于小程序环境下的使用。

2、WXS 脚本 - 基础语法

2.1 内嵌 wxs 脚本

在 WXML 文件中,可以使用 <wxs> 标签来嵌入 wxs 脚本。内嵌的 wxs 脚本可以直接在 WXML 中进行调用。

<!-- pageA.wxml -->
<wxs module="m1">
  var add = function(a, b) {
    return a + b;
  }
  module.exports.add = add;
</wxs>

<view>{
   { m1.add(1, 2) }}</view>
2.2 定义外联的 wxs 脚本

也可以将 wxs 脚本定义在外部文件,使用 <wxs> 标签的 src 属性引入外联的 wxs 脚本。

<!-- util.wxs -->
var multiply = function(a, b) {
  return a * b;
}
module.exports.multiply = multiply;

<!-- pageB.wxml -->
<wxs src="./util.wxs" module="m2"></wxs>

<view>{
   { m2.multiply(3, 4) }}</view>
2.3 使用外联的 wxs 脚本

外联的 wxs 脚本可以在 WXML 中通过模块的方式调用。

<!-- pageC.wxml -->
<wxs src="/utils/util.wxs" module="m3"></wxs>

<view>{
   { m3.multiply(5, 6) }}</view>

3、WXS 脚本 - WXS 的特点

3.1 与 JavaScript 不同

WXS 在语法和功能上有一些差异,不同于 JavaScript。开发者在使用 WXS 时需注意其特殊的语法和限制。

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

WXS 不能作为组件的事件回调函数,不能直接绑定在组件的事件属性上。

3.3 隔离性

WXS 具有独立的作用域,不受页面的其他脚本影响。它的变量和函数不会与页面的 JavaScript 全局作用域发生冲突。

3.4 性能好

由于 WXS 是小程序专用的脚本语言,它在小程序环境下运行更高效,具有较好的性能。

以上是关于 WXS 脚本的基本介绍,开发者可以根据实际需求使用 WXS 在小程序中进行数据处理和逻辑运算。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014158743/article/details/135581139

智能推荐

Android Studio使用百度语音合成是TTS时报错: ****.so文件找不到的有关问题_旧版的百度语言合成报错-程序员宅基地

文章浏览阅读2.1k次。使用百度语音合成过程时,一直error : notfint libgnustl_shared.so在项目工程gradle文件中添加如下代码段:sourceSets { main { jniLibs.srcDirs = ['libs'] } }..._旧版的百度语言合成报错

BZOJ1202: [HNOI2005]狡猾的商人_狡猾的商人[hnoi2005]-程序员宅基地

文章浏览阅读425次。Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的。账本上记录了n个月以来的收入情况,其中第i个月的收入额为Ai(i=1,2,3…n-1,n), 。当 Ai大于0时表示这个月盈利Ai 元,当 Ai小于0时表示这个月亏损Ai元。所谓一段时间内的总收入,就是这段时间内每个月的收入额的总和。 刁姹的任务是秘密进行的,为了调查商人的账本,她只好跑到商人那_狡猾的商人[hnoi2005]

HTML5 Web SQL 数据库_方式准则的定义-程序员宅基地

文章浏览阅读1k次。1、HTML5 Web SQL 数据库 Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs。如果你是一个 Web 后端程序员,应该很容易理解 SQL 的操作。Web SQL 数据库可以在最新版的 Safari, Chrome 和 Opera 浏览器中工作。2、核心方法 以下是规范中定义的三个_方式准则的定义

spring Boot 中使用线程池异步执行多个定时任务_springboot启动后自动开启多个线程程序-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏6次。spring Boot 中使用线程池异步执行多个定时任务在启动类中添加注解@EnableScheduling配置自定义线程池在启动类中添加注解@EnableScheduling第一步添加注解,这样才会使定时任务启动配置自定义线程池@Configurationpublic class ScheduleConfiguration implements SchedulingConfigurer..._springboot启动后自动开启多个线程程序

Maven编译打包项目 mvn clean install报错ERROR_mvn clean install有errors-程序员宅基地

文章浏览阅读1.1k次。在项目的target文件夹下把之前"mvn clean package"生成的压缩包(我的是jar包)删掉重新执行"mvn clean package"再执行"mvn clean install"即可_mvn clean install有errors

navacate连接不上mysql_navicat连接mysql失败怎么办-程序员宅基地

文章浏览阅读974次。Navicat连接mysql数据库时,不断报1405错误,下面是针对这个的解决办法:MySQL服务器正在运行,停止它。如果是作为Windows服务运行的服务器,进入计算机管理--->服务和应用程序------>服务。如果服务器不是作为服务而运行的,可能需要使用任务管理器来强制停止它。创建1个文本文件(此处命名为mysql-init.txt),并将下述命令置于单一行中:SET PASSW..._nvarchar链接不上数据库

随便推点

微信小程序api视频课程-定时器-setTimeout的使用_微信小程序 settimeout 向上层传值-程序员宅基地

文章浏览阅读1.1k次。JS代码 /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { setTimeout( function(){ wx.showToast({ title: '黄菊华老师', }) },2000 ) },说明该代码只执行一次..._微信小程序 settimeout 向上层传值

uploadify2.1.4如何能使按钮显示中文-程序员宅基地

文章浏览阅读48次。uploadify2.1.4如何能使按钮显示中文博客分类:uploadify网上关于这段话的搜索恐怕是太多了。方法多也试过了不知怎么,反正不行。最终自己想办法给解决了。当然首先还是要有fla源码。直接去管网就可以下载。[url]http://www.uploadify.com/wp-content/uploads/uploadify-v2.1.4...

戴尔服务器安装VMware ESXI6.7.0教程(U盘安装)_vmware-vcsa-all-6.7.0-8169922.iso-程序员宅基地

文章浏览阅读9.6k次,点赞5次,收藏36次。戴尔服务器安装VMware ESXI6.7.0教程(U盘安装)一、前期准备1、下载镜像下载esxi6.7镜像:VMware-VMvisor-Installer-6.7.0-8169922.x86_64.iso这里推荐到戴尔官网下载,Baidu搜索“戴尔驱动下载”,选择进入官网,根据提示输入服务器型号搜索适用于该型号服务器的所有驱动下一步选择具体类型的驱动选择一项下载即可待下载完成后打开软碟通(UItraISO),在“文件”选项中打开刚才下载好的镜像文件然后选择启动_vmware-vcsa-all-6.7.0-8169922.iso

百度语音技术永久免费的语音自动转字幕介绍 -程序员宅基地

文章浏览阅读2k次。百度语音技术永久免费的语音自动转字幕介绍基于百度语音技术,识别率97%无时长限制,无文件大小限制永久免费,简单,易用,速度快支持中文,英文,粤语永久免费的语音转字幕网站: http://thinktothings.com视频介绍 https://www.bilibili.com/video/av42750807 ...

Dyninst学习笔记-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏9次。Instrumentation是一种直接修改程序二进制文件的方法。其可以用于程序的调试,优化,安全等等。对这个词一般的翻译是“插桩”,但这更多使用于软件测试领域。【找一些相关的例子】Dyninst可以动态或静态的修改程序的二进制代码。动态修改是在目标进程运行时插入代码(dynamic binary instrumentation)。静态修改则是直接向二进制文件插入代码(static b_dyninst

在服务器上部署asp网站,部署asp网站到云服务器-程序员宅基地

文章浏览阅读2.9k次。部署asp网站到云服务器 内容精选换一换通常情况下,需要结合客户的实际业务环境和具体需求进行业务改造评估,建议您进行服务咨询。这里仅描述一些通用的策略供您参考,主要分如下几方面进行考虑:业务迁移不管您的业务是否已经上线华为云,业务迁移的策略是一致的。建议您将时延敏感型,有快速批量就近部署需求的业务迁移至IEC;保留数据量大,且需要长期稳定运行的业务在中心云上。迁移方法请参见如何计算隔离独享计算资源..._nas asp网站