微信小程序-导航 & 路由

页面跳转

页面路由

页面栈, 框架以的形式维护了当前的所有页面。

https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/route.html

使用 getCurrentPages() 函数获取当前页面栈。

// pages/base/index.js

const log = console.log;
const err = console.error; log(`getCurrentPages() 获取当前页面栈 base`, getCurrentPages());

// pages/base/index.js const log = console.log;
const err = console.error; log(`getCurrentPages() 获取当前页面栈 base`, getCurrentPages()); Page({ /**
* 页面的初始数据
*/
data: {
msg: "小程序-基础页面",
img: "/images/peppa-pig.jpeg",
arr: ["A", "B", "C",],
list: [
{
name: "xgqfrms",
age: 23,
},
{
name: "China",
age: 5000,
},
{
name: "USA",
age: 200,
},
],
isLogin: true,
count: 0,
},
clickAdd: function (e) {
console.log(`this =`, this);
console.log(`\nevent =`, e);
// this.data.count = this.data.count + 1;
this.setData({
count: this.data.count + 1,
});
},
add (e) {
console.log(`this =`, this);
console.log(`\nevent =`, e);
// ye {__wxExparserNodeId__: "fa2cbe59", __route__: "pages/base/index", route: "pages/base/index", __displayReporter: g, clickAdd: ƒ, …}
this.setData({
count: this.data.count + 1,
});
},
// add: (e) => {
// arrow function this bug
// console.log(`this =`, this);
// // this = undefined
// console.log(`\nevent =`, e);
// this.setData({
// count: this.data.count + 1,
// });
// },
clickBox () {
console.log(`click box`);
},
clickItem () {
console.log(`click item`);
},
dataset (e) {
// console.log(`e.currentTarget === e.target`, e.currentTarget === e.target, e);
// object !== object
const dataset = e.currentTarget.dataset;
console.log(`dataset =`, dataset);
// dataset = {uid: "123"}
console.log(`uid =`, dataset.uid);
// uid = 123
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
log(`%c小程序 页面的生命周期: %conLoad`, `color: #f00;`, `color: #f0f;`);
log(`options =`, options);
log(`getCurrentPages() 获取当前页面栈 ️`, getCurrentPages());
}, /**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
log(`%c小程序 页面的生命周期: %conReady`, `color: #f00;`, `color: #f0f;`);
}, /**
* 生命周期函数--监听页面显示
*/
onShow: function () {
log(`%c小程序 页面的生命周期: %conShow`, `color: #f00;`, `color: #f0f;`);
}, /**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
log(`%c小程序 页面的生命周期: %conHide`, `color: #f00;`, `color: #f0f;`);
}, /**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
log(`%c小程序 页面的生命周期: %onUnload`, `color: #f00;`, `color: #f0f;`);
}, /**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () { }, /**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
log(`%c小程序 页面的生命周期: %oonReachBottom`, `color: #f00;`, `color: #f0f;`);
}, /**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
log(`%c小程序 页面的生命周期: %oonShareAppMessage`, `color: #f00;`, `color: #f0f;`);
}
})

navigateTo

  1. 调用 API wx.navigateTo

https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateTo.html

wx.navigateTo({
url: 'test?id=1',
events: {
// 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
acceptDataFromOpenedPage: function(data) {
console.log(data)
},
someEvent: function(data) {
console.log(data)
}
...
},
success: function(res) {
// 通过eventChannel向被打开页面传送数据
res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' })
}
})
//test.js
Page({
onLoad: function(option){
console.log(option.query)
const eventChannel = this.getOpenerEventChannel()
eventChannel.emit('acceptDataFromOpenedPage', {data: 'test'});
eventChannel.emit('someEvent', {data: 'test'});
// 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
eventChannel.on('acceptDataFromOpenerPage', function(data) {
console.log(data)
})
}
})
  1. 使用组件 <navigator open-type="navigateTo"/>

https://developers.weixin.qq.com/miniprogram/dev/component/navigator.html


<!-- sample.wxml -->
<view class="btn-area">
<navigator
url="/page/navigate/navigate?title=navigate"
hover-class="navigator-hover">
跳转到新页面
</navigator>
<navigator url="../../redirect/redirect/redirect?title=redirect"
open-type="redirect"
hover-class="other-navigator-hover">
在当前页打开
</navigator>
<navigator url="/page/index/index"
open-type="switchTab"
hover-class="other-navigator-hover">
切换 Tab
</navigator>
<navigator target="miniProgram"
open-type="navigate"
app-id=""
path=""
extra-data=""
version="release">
打开绑定的小程序
</navigator>
</view> <!-- navigator.wxml -->
<view style="text-align:center"> {{title}} </view>
<view> 点击左上角, 返回回到, 之前页面 </view> <!-- redirect.wxml -->
<view style="text-align:center"> {{title}} </view>
<view> 点击左上角, 返回回到, 上级页面 </view>
Page({
onLoad: function(options) {
this.setData({
title: options.title
})
}
})

redirectTo


switchTab



reLaunch


Tips:

navigateTo, redirectTo 只能打开非 tabBar 页面。

switchTab 只能打开 tabBar 页面。

reLaunch 可以打开任意页面。

页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。

调用页面路由携带的参数可以在目标页面的 onLoad 生命周期函数中获取。

refs



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


微信小程序-导航 & 路由的更多相关文章

  1. 微信小程序开发--路由切换,页面重定向

    这段时间开发了一个微信小程序,虽然小程序的导航API 官方文档写得很详细,但是在具体开发过程中还是会遇到很多不明白,或者一时转不过弯的地方. 1.页面切换传参,参数读取 1.1  wx.navigat ...

  2. 自定义微信小程序导航(兼容各种手机)

    详细代码请见github,请点击地址,其中有原生小程序的实现,也有wepy版本的实现 了解小程序默认导航 如上图所示,微信导航分为两部分,第一个部分为statusBarHeight,刘海屏手机(iPh ...

  3. 微信小程序の页面路由

    微信小程序的页面路由由平台已栈的形式管理. 微信小程序的页面为什么会如此特殊呢,因为可视区域始终只有一个页面. 一.小程序页面的路由方式 小程序页面有6种路由方式:初始化.打开新页面.页面重定向.页面 ...

  4. 微信小程序——导航栏组件

    组件内属性详解   属性 类型 默认值 必填 说明 nav-postion String relative 否 导航栏(包含导航栏以及状态栏)的position,可取值relative.fixed.a ...

  5. 微信小程序导航:官方工具+精品教程+DEMO集合(1月7更新)

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=14764346784612:简易教程:https://mp.weixin.qq.com/debug ...

  6. 微信小程序中路由跳转

    一.是什么 微信小程序拥有web网页和Application共同的特征,我们的页面都不是孤立存在的,而是通过和其他页面进行交互,来共同完成系统的功能 在微信小程序中,每个页面可以看成是一个pageMo ...

  7. 微信小程序 - Request | 路由跳转 | 本地存储

    Request 官方文档 wx.request相当于发送ajax请求 参数 属性 类型 默认值 必填 说明 url string   是 开发者服务器接口地址 data string/object/A ...

  8. 微信小程序之路由

    1. 路由方式 路由方式 触发时机 路由前页面 路由后页面 初始化 小程序打开的第一个页面 onLoad, onShow 打开新页面 调用 API wx.navigateTo 或使用组件 onHide ...

  9. 微信小程序------导航栏样式、tabBar导航栏

    一:导航栏样式设置 小程序的导航栏样式在app.json中定义. 这里设置导航,背景黑色,文字白色,文字内容测试小程序 app.json内容: { "pages":[ " ...

随机推荐

  1. Windows server 2008常用优化设置

    1. 如何取消开机按 CTRL+ALT+DEL登录? 控制面板→管理工具→本地安全策略→本地策略→安全选项→交互式登录:无须按CTRL+ALT+DEL→启用. 2. 如何取消关机时出现的关机理由选择项 ...

  2. 一个关于时区的bug

    起因: 在 Apollo 中配置了某活动的开始时间是 2020-05-15, 代码中的逻辑判断如下: const nowTime = new Date().getTime(); const start ...

  3. CSS居中的常用方式以及优缺点

    前言 居中是页面开发中经常遇到的问题. 使用合适的.简单的.兼容性好的居中方式是我们页面仔在整个工作生涯中都要面对的问题. text-align:center 来看这个例子,一张图片和文字进行居中.如 ...

  4. socket 的使用

    基于TCP协议的socket tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 server端 import socket sk = socket.socket() sk.bind( ...

  5. Maven环境搭建以及在IDEA中的配置与简单入门

    目录 一.下载与安装 二.配置 1. 环境变量 2. 阿里云镜像 3. 本地仓库 三.IDEA创建Maven项目 1. 创建一个原始的Maven项目 1.2 指定模板创建(可选) 2. 配置GAV 3 ...

  6. NodeMCU获取并解析心知天气信息

    NodeMCU获取并解析心知天气信息 1 注册心知天气并获取私钥 打开心知天气网站,点击注册按钮 填写基本信息注册心知天气账号,登录注册所填写的邮箱点击链接进行账号激活,随后出现如下界面 点击登录按钮 ...

  7. Flink-v1.12官方网站翻译-P022-Working with State

    有状态程序 在本节中,您将了解Flink为编写有状态程序提供的API.请看一下Stateful Stream Processing来了解有状态流处理背后的概念. 带键值的数据流 如果要使用键控状态,首 ...

  8. JVM之JVM体系结构

    JVM是运行在操作系统之上的,它与硬件没有直接的交互 下图运行时数据区灰色代表线程私有,亮色(方法区和堆)代表所有线程共享. 1.类装载器ClassLoader 负责加载class文件,class文件 ...

  9. mysql查询太慢,我们如何进行性能优化?

    老刘是即将找工作的研究生,自学大数据开发,一路走来,感慨颇深,网上大数据的资料良莠不齐,于是想写一份详细的大数据开发指南.这份指南把大数据的[基础知识][框架分析][源码理解]都用自己的话描述出来,让 ...

  10. [The Preliminary Contest for ICPC Asia Nanjing 2019] L-Digit sum

    题意 $S_{b}(n)$表示数字$n$在$b$进制下各位的和,对于给定的数$N$和$b$,求出$\sum_{n=1}^{N}S_{b}(n)$ $[ link ]$ 分析 题解上写的是签到题,这是个 ...