当前位置: 首页 > news >正文

开发中使用——鸿蒙子页面跳转到指定Tab页面

文章目录

  • 背景
  • 一、普通的页面跳转和返回
    • 1.普通跳转
    • 2.带参数跳转
    • 3.普通返回
    • 4.返回到首页
  • 二、返回主Tab的指定页面
    • 1.思考:通过发消息
    • 2.思考:全局控制Tab的控制器


背景

在开发中,难免会遇到从子页面或者更深层的页面,跳转到主Tab页面的指定哪个Tab?举个栗子,App中有四个Tab(A、B、C、D),如果从A页面跳转到C页面,如果做?或者说从B的子页面,跳转到D?

我们先看看普通页面的跳转和返回是怎么做的?

一、普通的页面跳转和返回

1.普通跳转

普通的页面跳转M->N,从M页面跳转到N页面,使用下面的方法是可以。

      this.getUIContext().getRouter().pushUrl({url: "pages/NPage"});

2.带参数跳转

普通的页面跳转M->MDetailPage,从M页面跳转到M的详情页面(MDetailPage),使用下面的方法是可以。

// M页面跳转操作this.getUIContext().getRouter().pushUrl({url:"pages/MDetailPage",params: {id: this.model.id}})// M的详情页面MDetailPage接收参数aboutToAppear() {// 获取传递的M数据const params = this.getUIContext().getRouter().getParams() as Record<string, string>;if (params && params['id']) {this.id = params['id'] as string;}}

3.普通返回

普通的页面跳转N->M,从N页面跳转到M页面

this.getUIContext().getRouter().back();

4.返回到首页

从任何一个子页面,返回到导航栈的第一个页面。

this.getUIContext().getRouter().back(1);

二、返回主Tab的指定页面

这个时候,使用普通的跳转和返回达不到这个效果了?只能实现返回到主Tab页面,但是指定哪个Tab该怎么实现呢。

1.思考:通过发消息

我想到了使用flutter中的eventBus,发个消息过来,在主tab页面接收后,指定tab切到具体的tab子页面中。

以为现在的鸿蒙知识,好像不能这样实现吧,我所知的是不可以的。

2.思考:全局控制Tab的控制器

我仔细想了一下,好像可行。搞个单例类,搞两个属性,一个是Tab的控制器,一个是记录当前是哪个Tab。

  • 使用修饰符@ObservedV2装饰这个单例类,使用修饰符@Trace装饰这两个属性,来监听这两个属性的变化。
@ObservedV2
export class AppModelManager{static instance:AppModelManager;constructor() {}static getInstance(){if(AppModelManager.instance == null){AppModelManager.instance = new  AppModelManager();}return AppModelManager.instance;}@Tracepublic currentTabIndex:number = 0;@Tracepublic tabsController: TabsController = new TabsController();}
  • 然后在主Tab中,使用这两个属性。将原来使用tabsController和currentTabIndex的地方,换成单例中的这个。
/// 在原来使用tabsController的地方,换成单例类中的tabsControllerTabs({ barPosition: BarPosition.End, controller: AppModelManager.getInstance().tabsController }) {...... }.onChange((index: number) => {AppModelManager.getInstance().currentTabIndex = index;}).width('100%').height('100%')}.width('100%').height('100%')}/// 在原来使用currentTabIndex的地方,换成单例类中的currentTabIndex@Builder TabBuilder(title: Resource, index: number, normalImg: Resource, selectedImg: Resource) {Column() {Image(AppModelManager.getInstance().currentTabIndex === index ? selectedImg : normalImg).width(24).height(24)Text(title).fontSize(12).fontColor(AppModelManager.getInstance().currentTabIndex === index ? $r('app.color.tab_selected') : $r('app.color.tab_normal')).margin({ top: 4 })}.width('100%').height('100%').justifyContent(FlexAlign.Center).onClick(() => {AppModelManager.getInstance().currentTabIndex = index;AppModelManager.getInstance().tabsController.changeIndex(index);})
  • 在你需要返回的页面中,调用单例中的tabsController和currentTabIndex即可。别忘了最后调用back(1)返回到主页面。
      CacheDataManager.getInstance().currentTabIndex = 2;CacheDataManager.getInstance().tabsController.changeIndex(2);this.getUIContext().getRouter().back(1);

至此功能实现了。


文章转载自:

http://EgKdC8Zv.tgmfg.cn
http://qBOin9ne.tgmfg.cn
http://GrJqqugb.tgmfg.cn
http://oQzcobgF.tgmfg.cn
http://8NYe6Or6.tgmfg.cn
http://aUPR7P8p.tgmfg.cn
http://obtIrxPa.tgmfg.cn
http://gL3HP4dt.tgmfg.cn
http://yCHpMBYn.tgmfg.cn
http://EzdSS1ut.tgmfg.cn
http://bqDVnTuf.tgmfg.cn
http://b4xlNJ87.tgmfg.cn
http://yzmlD6vv.tgmfg.cn
http://iugjiYpR.tgmfg.cn
http://HUmXw0Ef.tgmfg.cn
http://zIoW3kKa.tgmfg.cn
http://jJ4erKvs.tgmfg.cn
http://7Dbe4Bdg.tgmfg.cn
http://49peBoSp.tgmfg.cn
http://qJ90Domi.tgmfg.cn
http://awl2uJsT.tgmfg.cn
http://nduxHujQ.tgmfg.cn
http://JHbWCp9g.tgmfg.cn
http://Ay2dj9bp.tgmfg.cn
http://DFzMJAd7.tgmfg.cn
http://2umf4PdK.tgmfg.cn
http://9rfp4XAQ.tgmfg.cn
http://kytQqkbp.tgmfg.cn
http://0Qw5luFc.tgmfg.cn
http://5ZV3me5Y.tgmfg.cn
http://www.dtcms.com/a/374852.html

相关文章:

  • HarmonyOS实现快递APP自动识别地址
  • AJAX入门-URL
  • 【C++】18. 红⿊树实现
  • 基于Java Spring Boot的云原生TodoList Demo 项目,验证云原生核心特性
  • 记录一次rk3568硬解码时cpu占用率高的问题
  • Electron 跨平台兼容性:处理 OS 差异
  • Docker 学习笔记(五):网络与存储核心原理及实战应用
  • Who Wants To Be King: 1靶场渗透
  • PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
  • 深入理解 MyBatis-Plus 的 QueryWrapper:动态 SQL 构建的利器
  • 文件的相关概念
  • 注解参数校验
  • AI 测试平台新功能揭秘:自动化测试用例运行的奥秘
  • K8s是什么
  • 开源AI智能客服与AI智能名片在S2B2C商城小程序客服管理中的应用与影响
  • Python + Vue.js:现代全栈开发的完美组合
  • netty-scoket.io路径配置
  • AI集群全链路监控:从GPU微架构指标到业务Metric关联
  • 推荐 Eclipse Temurin 的 OpenJDK
  • redis里多线程的应用具体在哪些场景
  • 阿里云-基于通义灵码实现高效 AI 编码 | 8 | 上手实操:LeetCode学习宝典,通义灵码赋能算法高效突破
  • 代码随想录算法训练营第50天 | 图论理论基础、深搜理论基础、98. 所有可达路径、广搜理论基础
  • Gradio全解11——Streaming:流式传输的视频应用(3)——YOLO系列模型技术架构与实战
  • WPF应用程序中的异常处理
  • openEuler2403安装部署Prometheus和Grafana
  • PyCharm 连接 AutoDL 远程服务器
  • 智能AI汽车电子行业,EMS应用相关问题
  • Linux随记(二十三 )
  • 【文献速递】基于minigene技术解析PTBP3介导IL-18可变剪接的分子机制
  • 排序---快速排序(Quick Sort)