智能小程序页面配置、运行机制及路由

news2025/1/11 20:58:32

页面介绍

Page 代表应用的一个页面,负责页面展示和交互。每个页面对应一个子目录,一般有多少个页面,就有多少个子目录。它也是一个构造函数,用来指定页面的初始数据、生命周期回调、事件处理函数等。

每个小程序页面一般包含以下文件。

  • [pagePath].js:注册页面
  • [pagePath].tyml:页面结构
  • [pagePath].tyss:页面样式(可选)
  • [pagePath].json:页面配置(可选)
  • [pagePath].rjs:页面渲染脚本文件(可选)

注册页面

小程序页面必须使用 Page() 函数 注册且只注册一次。

Page({
  data: {
    title: 'Smart',
  },
  onShow: function () {
    ty.showToast({ title: this.data.title });
  },
  say: function () {
    this.setData({ title: 'hello world' });
  },
});

以上注册页面对象,且初始化数据为 { title: 'Smart' },并响应 onShow 生命周期函数。

页面结构

页面结构通过组件标签以及自定义组件标签,进行结构描述。页面由标签、属性和页面数据组成。

<view class="my-view" bind:tap="say">{{title}}</view>

更多模板语法,请参考 TYML 语法参考。

页面样式

.my-view {
  color: blue;
}

页面配置

{
  "navigationBarTitleText: "页面名"
}

以上示例初始化时展示 Smart 样式表现为蓝色。当单击后调用页面方法 say(),修改页面数据,重新渲染后,显示为 hello world

[pagePath].json 文件用于配置当前页面的窗口表现。页面配置比 app.json 全局配置简单得多,只能设置 window 相关配置项,但无需写 window 这个键。页面配置项会优先于全局配置项。

配置项

用于设置小程序当前页面的状态栏、导航条、标题、窗口背景色。

属性类型默认值描述
backgroundColorHexColor#ffffff窗口的背景色。
backgroundColorBottomstring#ffffff底部窗口的背景色,仅 iOS 支持。
backgroundColorTopstring#ffffff顶部窗口的背景色,仅 iOS 支持。
backgroundTextStylestringdark下拉 loading 的样式,仅支持 dark 和 light
disableScrollbooleanfalse是否禁用页面滚动。默认 false。开启后页面将无法滚动。
enablePullDownRefreshbooleanfalse是否开启全局的下拉刷新。
navigationBarBackgroundColorHexColor#ffffff导航栏背景颜色,如 #000000。
navigationBarTextStylestringblack导航栏标题颜色,仅支持 black 和 white
navigationBarTitleTextstring导航栏标题文字内容。
navigationStylestringdefault导航栏样式。default:默认样式。custom 自定义导航栏,只保留右上角胶囊按钮。
onReachBottomDistancenumber50页面上拉触底事件触发时距页面底部距离,单位为 px。
pageOrientationstringportrait屏幕旋转设置。取值范围:
portrait:竖屏,默认值。
landscape:横屏。
auto:自动。
usingComponentsobject当前页面引用的自定义组件。
boardMenusarray[]自定义菜单配置。容器版本 ≥ 2.3.0。

usingComponents

声明页面引用组件。当一个组件被多个页面所引用时,避免重复在页面配置中声明,可使用全局声明的形式。组件路径支持:

  1. 绝对路径形式,以 / 开头,表示小程序源码目录。
  2. 相对路径形式,以 . 开头,基于当前 json 文件所在目录。
  3. npm 三方包。
{
  "usingComponents": {
    "foo": "/absolute/foo/index",
    "foo": "./relative/foo/index",
    "foo": "package/es/foo/index"
  }
}

注意:路径地址必须精确到文件名,不可省略缺省 index

完整示例

{
  "navigationBarBackgroundColor": "#000",
  "navigationBarTextStyle": "black",
  "navigationBarTitleText": "首页",
  "navigationStyle": "default",
  "backgroundColor": "#000",
  "backgroundTextStyle": "dark",
  "backgroundColorTop": "#fff",
  "backgroundColorBottom": "#fff",
  "enablePullDownRefresh": true,
  "onReachBottomDistance": 50,
  "disableScroll": false,
  "pageOrientation": "portrait",
  "usingComponents": {
    "foo": "/components/foo/index"
  },
  "boardMenus": [
    {
      "key": "home",
      "iconPath": "@iconPath1",
      "text": "主页"
    }
  ]
}

页面运行机制

小程序启动时,将所有页面注册到逻辑层中,等待路由进入具体页面时将其实例化。在启动阶段(或路由变更),触发应用生命周期及页面生命周期。

页面生命周期

小程序由视图层和逻辑层两个部分组成。视图层和逻辑层同时运行。

  • 应用逻辑层启动后运行 app.onLaunch 和 app.onShow 以完成 App 创建,再运行 page.onLoad 和 page.onShow 以完成 Page 创建。此时,等待视图层初始化完成通知运行。
  • 视图层初始化完成通知逻辑层,逻辑层将初始化数据发送给视图层进行渲染。此时,视图层完成第一次数据渲染。
  • 第一次渲染完成后,视图层进入就绪状态并通知逻辑层。逻辑层调用 page.onReady 函数并进入活动状态。
  • 逻辑层进入活动状态后,每次数据修改将会通知视图层进行渲染。当切换页面进入后台,逻辑层调用 page.onHide 函数后,进入存活状态。页面返回到前台将调用 page.onShow 函数,进入活动状态。当页面返回或重定向到其它页面后,将调用 page.onUnload 函数,进行页面销毁。

详细有关 Page 的生命周期,请参考 Page。

下图说明了页面 Page 实例过程中,视图层与逻辑层的进程关系及页面生命周期的触发顺序。

可逐步在实际业务开发中增加对上图的理解。

页面路由

在小程序中所有页面的路由全部由框架进行管理。

路由栈

小程序中的页面路由是一个栈结构,只能通过 ty.navigateTo 和 ty.redirectTo 等方式操作。且页面路由栈最多十层。路由操作则不再生效。

路由方式

对于路由的触发方式以及页面生命周期函数如下:

路由方式触发时机路由前页面路由后页面页面栈
初始化小程序打开的第一个页面onLoad onShow onReady[A]
打开新页面ty.navigateToonHideonLoad onShow onReady[A, B]
页面重定向ty.redirectToonUnloadonLoad onShow onReady[A, C]
页面返回ty.navigateBackonUnloadonShow[A]
Tab 切换ty.switchTab各种情况请参考下表[D]
重启动ty.reLaunchonUnloadonLoad onShow onReady[A]

Tab 切换对应的生命周期(以 A、B 页面为 Tabbar 页面,C 是从 A 页面打开的页面,D 页面是从 C 页面打开的页面为例):

当前页面路由后页面触发的生命周期(按顺序)
AANothing happend
ABA.onHide(), B.onLoad(), B.onShow()
AB(再次打开)A.onHide(), B.onShow()
CAC.onUnload(), A.onShow()
CBC.onUnload(), B.onLoad(), B.onShow()
DBD.onUnload(), C.onUnload(), B.onLoad(), B.onShow()
D(从转发进入)AD.onUnload(), A.onLoad(), A.onShow()
D(从转发进入)BD.onUnload(), B.onLoad(), B.onShow()

 

路由路径 URL

路由路径是一个绝对路径,以 / 开头,后面跟随页面的路径,如 /pages/index/index。路由路径是一个相对于小程序根目录的路径。

路由路径必须是一个有效的路径,在 app.json 中声明过的页面路径。

相对路径模式

相对路径模式是指在路由路径中不以 / 开头,如 index/index。相对路径模式会以当前页面​​​​​​​为基准,进行路径的拼接。

Page({
  onLoad() {
    // 当前页面是 /pages/home
    ty.navigateTo({
      url: 'index/index', // 跳转到 /pages/index/index (相对于 /pages/home)
    })
  },
})

注意:任何时候优先使用绝对路径模式,避免出现路径错误的情况。除非你明确知道当前页面的路径!

注意事项

  • navigateTo, redirectTo 只能打开非 tabBar 页面。 -switchTab 只能打开 tabBar 页面。
  • reLaunch 可以打开任意页面。
  • 页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
  • 调用页面路由带的参数可以在目标页面的 onLoad(query) 中获取。

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

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

相关文章

FMEA:总监和架构师都在用的高可用架构分析方法

FMEA&#xff1a;总监和架构师都在用的高可用架构分析方法 记得之前准备春晚项目的时候&#xff0c;团队成员在一起过架构&#xff0c;老板最常问的问题是“这个组件挂了怎么办?有什么影响&#xff1f;”&#xff0c;我当时还在心里默默嘀咕&#xff1a;这咋都这么容易挂呢&a…

有趣的css - 好看的呼吸灯效果

整体效果 这个效果主要用 css3 的 animation 属性来实现的。 这个效果可以用作在网站的整体 Loading&#xff0c;也可以放在网站首屏当一个 banner 的背景也是非常棒的&#xff01; 代码部分 html 部分代码&#xff1a; <div class"app"><span class&quo…

什么是git,怎样下载安装?

简介&#xff1a; 应用场景&#xff1a; 应用场景&#xff1a;团队企业开发 作用&#xff1a; 安装&#xff1a; 网址&#xff1a;Git - Downloads cmd 安装&#xff1a;winget install --id Git.Git -e --source winget

Linux之中文字体安装

一、需求说明 客户系统部署要求使用指定字体&#xff0c;该字体在linux服务器上没有&#xff0c;导致系统处理相关上传文档的时候显示乱码&#xff0c;所以我们需要在linux服务器上安装指定字体。博主实验环境&#xff1a; 操作系统&#xff1a;centos7.6安装window环境下的宋…

Nginx实现反向代理负载均衡实验

实验环境&#xff1a; VM REdhat虚拟机&#xff08;192.168.87.5&#xff09;一台、VM Redhat虚拟机&#xff08;192.168.87.3&#xff09;一台、阿里云服务器&#xff08;47.93.79.92&#xff09;一台 实验要求&#xff1a;通过windows浏览器访问192.168.87.5&#xff08;虚…

MIT_线性代数笔记:线性代数常用概念及术语总结

目录 1.系数矩阵2.高斯消元法3.置换矩阵 Permutation4.逆矩阵 Inverse5.高斯-若尔当消元法6.矩阵的 LU 分解7.三角矩阵8.正定矩阵 1.系数矩阵 线性代数的基本问题就是解 n 元一次方程组。例如&#xff1a;二元一次方程组 2 x − y 0 − x 2 y 3 \begin{align*} & 2x -…

DeepSORT算法实现车辆和行人跟踪计数和是否道路违规检测(代码+教程)

DeepSORT算法是一种用于目标跟踪的算法&#xff0c;它可以对车辆和行人进行跟踪计数&#xff0c;并且可以检测是否存在道路违规行为。该算法采用深度学习技术来提取特征&#xff0c;并使用卡尔曼滤波器来估计物体的速度和位置。 DeepSORT算法通过首先使用目标检测算法来识别出…

全国客运飞机场数据,shp/excel格式,已可视化

基本信息. 数据名称: 全国客运飞机场数据 数据格式: Shpxlsx 数据时间: 2023年 数据几何类型: 点 数据坐标系: WGS84坐标系 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1xzqhdm行政区划代码2xzqhmc行政区划名称3mc机场名称4lon经度坐…

【文本到上下文 #7】探索 NLP 中的 Seq2Seq、编码器-解码器和注意力机制

一、说明 今天&#xff0c;我们将探讨序列到序列 &#xff08;seq2seq&#xff09; 模型的复杂工作原理&#xff0c;特别关注编码器-解码器架构和注意力机制。这些概念是各种 NLP 应用的基础&#xff0c;从机器翻译到问答系统。 这是可以期待的&#xff1a; Seq2Seq模型中的编码…

小程序开发平台微同城本地生活服务小程序功能 带完整的安装以及部署教程

移动互联网的普及&#xff0c;小程序已经成为一种新的应用形态&#xff0c;为本地生活服务提供了更多的可能性。微同城作为一款本地生活服务小程序&#xff0c;致力于为当地居民提供便捷、高效的生活服务体验。罗峰给大家分享微同城本地生活服务小程序的源码开发背景以及系统的…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之CheckboxGroup组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之CheckboxGroup组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、CheckboxGroup组件 提供多选框组件&#xff0c;通常用于某选项的打开或关…

【数据分析】numpy基础第三天

前言 本文只会讲解最常用的加、减、乘、除&#xff0c;点乘&#xff08;或叫矩阵乘法&#xff09;、还有广播机制。 本文代码 链接提取码&#xff1a;1024 第1部分&#xff1a;基础数学计算 使用NumPy进行基本的数学运算是十分直观和简单的。下面我们将展示一些基本的加、…

机器学习第二十七周周报 PINNs

文章目录 week27 PINNs摘要Abstract一、监督学习二、文献阅读1. 题目2. abstract3. 偏微分方程的数据驱动解3.1连续时间模型example(Schrodinger equation)&#xff1a; 3.2离散时间模型Example (Allen–Cahn equation)&#xff1a; 4. 文献解读4.1 Introduction4.2 创新点 三、…

1.28寒假集训

A: 解题思路&#xff1a; 移项就好v mv / (M - m) 下面是c代码&#xff1a; #include<iostream> using namespace std; int main() {int t;double M,m,v;cin >> t;while(t ! 0){cin >> M >> m >> v;printf("%.2lf\n",(m * v) / (M…

【动态规划】【字符串】【行程码】1531. 压缩字符串

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 LeetCode 1531. 压缩字符串 II 行程长度编码 是一种常用的字符串压缩方法&#xff0c;它将连续的相同字符&#xff08;重复 2 次或更多次&#xff09;替换为字符和表示字符计数的数字&#xff08;行程长度&#xff09;…

WordPress如何自定义日期和时间格式?附PHP日期和时间格式字符串

WordPress网站在很多地方都需要用到日期和时间&#xff0c;那么我们应该在哪里设置日期和时间呢&#xff1f;又如何自定义日期和时间格式呢&#xff1f;下面boke112百科就跟大家一起来学习一下PHP标准化的日期和时间格式字符串。 特别说明&#xff1a;格式字符是标准化的&#…

Material Components for Android助你打造精美App

Material Components for Android助你打造精美App 简介 Material Components for Android (MDC-Android) 是帮助开发者执行 Material Design 的工具。由谷歌的核心工程师和用户体验设计师团队开发&#xff0c;这些组件使得开发者可以可靠地开发工作流来构建美观且功能齐全的 …

RT-DETR改进有效系列目录 | 包含卷积、主干、RepC3、注意力机制、Neck上百种创新机制

💡 RT-DETR改进有效系列目录 💡 前言 Hello,各位读者们好 Hello,各位读者,距离第一天发RT-DETR的博客已经过去了接近两个月,这段时间里我深入的研究了一下RT-DETR在ultralytics仓库的使用,旨在为大家解决为什么用v8的仓库训练的时候模型不收敛,精度差的离谱的问题,…

sqli.labs靶场(8-17关)

8、第八关&#xff08;布尔盲注&#xff09; id1显示You are in...........&#xff0c;id1单引号不显示&#xff0c;id1 --显示正常 这个应该是单引号闭合&#xff0c;接下来就和第七关差不多上脚本 爆库名长度&#xff1a;id1%27%20and%20length(database()){i}%20-- 爆库…

如何在 VM 虚拟机中安装 Red Hat Enterprise Linux 9.3 操作系统保姆级教程(附链接)

一、VMware Workstation 虚拟机 先得安装 VM 虚拟机&#xff0c;没有的可以参考这篇文章安装 VM 虚拟机 如何在 VM 虚拟机中安装 Win10 操作系统保姆级教程&#xff08;附链接&#xff09;https://eclecticism.blog.csdn.net/article/details/135713915 二、Red Hat Linux 镜…