小程序跳转多次返回首页

news/2024/7/20 2:05:10 标签: 小程序

小程序跳转多次返回首页

在这里插入图片描述

小程序跳转多个页面后直接返回首页 问题

例: 跳转:A(首页) - > B -> C -> D 返回:D -> A(首页)

1、页面中按钮跳转

<!--D页面 WXML-->
<view class="-btn">
	<button bindtap="goBack">返回</button>
</view>

1.1、已知 跳转次数

如果已知了跳转次数 比如上面跳转了 3 次

A(首页) - > B -> C -> D 之间的跳转 用 wx.navigateTo

wx.navigateTo({
 url:'/pages/...'
})

D -> A 返回 用 wx.navigateBack

// D页面 js
goBack(){
  wx.navigateBack({
  	delta: 3
	})
}

1.2、未知 跳转次数

D -> A 返回之间的跳转 用 wx.reLaunch

wx.reLaunch({
  url: '/pages/A/A'
})

2、点击左上角返回

在这里插入图片描述

正常点击左上角返回 是直接返回的 C 页面

要想返回 A(首页)需要了解 路由方式

所以当 D - A 时 会触发 onUnload

2.1、已知 跳转次数

  // D页面 js
  onUnload () {
      wx.navigateBack({
        delta: 3
      })
  },

2.2、未知 跳转次数

  // D页面 js
  onUnload () {
    wx.reLaunch({
  		url: '/pages/A/A'
		})
  },

3、我自己遇到的问题

两种进 E(页面) 路径,但是 E(页面) 只能返回(点击左上角)到 A(首页)。

A(首页)->E(页面)
A(首页)->B(页面)->C(页面)->D(页面)->E(页面)

我是已知了两种情况

并且已知了 跳转的 次数

然后 结合路由信息getCurrentPages() 来实现返回的

  • 上一个页面是 A(首页) 就直接返回,不做处理
  • 上一个页面是 D(页面) 使用 wx.navigateBack 返回

实现代码:

data:{
  prevPageUrl: "", // 前一个页面的路由 路径
}

onUnload () {
    if (this.data.prevPageUrl !== "pages/index/index") {
      wx.navigateBack({
        delta: 4
      })
    }
},
    
// 获取上个页面的路由
getPrevPageUrl() {
    const pages = getCurrentPages() // 获取加载的页面
    const prevPage = pages[pages.length - 2] // 获取当前页面的对象
    const url = prevPage.route // 当前页面url
    this.setData({
      prevPageUrl: url
    })
}

4、路由方式

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

路由方式触发时机路由前页面路由后页面
初始化小程序打开的第一个页面onLoad, onShow
打开新页面调用 API wx.navigateTo 使用组件 ``onHideonLoad, onShow
页面重定向调用 API wx.redirectTo 使用组件 ``onUnloadonLoad, onShow
页面返回调用 API wx.navigateBack 使用组件`` 用户按左上角返回按钮onUnloadonShow
重启动调用 API wx.reLaunch 使用组件 ``onUnloadonLoad, onShow

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()

5、注意事项

  • navigateTo, redirectTo 只能打开非 tabBar 页面。
  • switchTab 只能打开 tabBar 页面。
  • reLaunch 可以打开任意页面。

http://www.niftyadmin.cn/n/451474.html

相关文章

少儿英语-思维导图学语法-特殊名词变复数

“通过思维导图&#xff0c;轻松学语法” 正文&#xff1a; 今天我们将一起探索英语中那些特殊的名词复数形式。学习特殊名词的复数变换可以让我们的英语更加地道和流利。让我们来看看一些有趣的例子吧&#xff01; "Man" 变成 "Men" 你可能已经知道 &q…

2023年上半年软考成绩查询时间

23年上半年软考考后成绩查询、分数线、证书领取相关注意事项 一、软考成绩查询时间 软考考试时间分为上半年和下半年&#xff0c;上半年固定是在五月份下半年固定是在十一月份。 成绩查询时间一般在考试时间后的两个月左右根据历年来看&#xff0c; 根据往年成绩查询时间来看…

Android4.4实现简单的录像功能

一、前言 在Android中实现录像功能&#xff0c;高版本Android和低版本Android的API使用方式不同。本文以Android4.4系统为基础&#xff0c;简单的列举一下实现过程。 二、步骤 要在 Android 4.4 中实现录像功能&#xff0c;可按照以下步骤进行操作&#xff1a; 在布局文件中…

Opencv项目实战:23 智能计数和表单信息

目录 0、项目介绍 1、效果展示 2、项目搭建 3、项目代码展示与部分讲解 拍照脚本data_collection.py 图片检测Picdetect.py 摄像头检测Videodetect.py 主函数CountMain.py 自定义模块tally.py 4、项目资源 5、项目总结 0、项目介绍 有一段时间没有更新专栏了&#…

Grafana 系列-GaC-2-Grafana Terraform Provider 基础

系列文章 Grafana 系列文章Terraform 系列文章 概述 前文最后总结了我的工具选型&#xff1a; Grafana Terraform providerJsonnet 我们今天先简单介绍 Grafana Terraform provider. Grafana Terraform Provider Grafana provider 为 Grafana 提供配置管理资源。是目前 …

01-初识threejs

基本概念 场景&#xff08;Scene&#xff09;&#xff1a;场景是 three.js 中所有 3D 对象的容器。它包含了所有的相机、灯光、几何体、材质、纹理等对象。相机&#xff08;Camera&#xff09;&#xff1a;相机定义了场景中的视角。它控制了场景中哪些部分会被渲染出来&#x…

【人脸检测——Dlib学习1】Face_detector_example

# -*-coding:utf-8-*- #author: lyp time: 2018/9/7 import cv2 import dlib # 初始化程序 detector = dlib.get_frontal_face_detector() # 读取图片,在cmd中键入 python xx(文件名).py 需要识别的图片名 img = cv2.imread("cba.jpg") # 参数1表示我们对图像进行…

从零开始 Spring Boot 45:FactoryBean

从零开始 Spring Boot 45&#xff1a;FactoryBean 图源&#xff1a;简书 (jianshu.com) 在前文中我介绍过 FactoryBean&#xff0c;本篇文章会更深入的介绍相关内容。 依赖注入 从一个简单示例开始&#xff0c;我们看使用FactoryBean定义的 Spring Bean 如何注入。 假设我们…