鸿蒙ZRouter动态路由框架—NavDestnation页面模板化

前言

  • 源码:https://gitee.com/common-apps/ZRouter
  • OH:https://ohpm.openharmony.cn/#/cn/detail/@hzw%2Fzrouter

基本使用

在介绍基本使用的流程中,我们知道每个子页面都需要通过NavDestination来包裹,这样会造成代码的冗余,因此我们可通过ZRouter的模板化能力将NavDestination层去除。

在ZRouter和编译插件1.2.0版本开始支持NavDestination页面模板化,是一个可选项非强制性要求的功能,由开发者自由选择。

在Route或ZRoute注解中设置useTemplate属性为true,代码示例如下:

@ZRoute({ name: RouterConstants.CUSTOM_COMPONENT_CHILD_VIEW, useTemplate: true, title: "NavDest模板化案例" })
@Component
export struct ChildView {build(){Column({ space: 15 }) {...}}
}

这样就完成页面的跳转。

ZRouter.getInstance().navigation(RouterConstants.CUSTOM_COMPONENT_CHILD_VIEW)

生命周期函数管理

提供了两种方式来监听NavDestination页面的生命周期函数。

  • 继承于ZLifecycleObserver类实现生命周期函数,@ZLifecycle注解声明;
  • 通过ZRouter的addLifecycleObserver()静态方法设置监听。

第一种方式,新建一个类继承ZLifecycleObserver,并用@ZLifecycle注解声明,其name属性是路由名称 ,代码示例:

@ZLifecycle({ name: RouterConstants.CUSTOM_COMPONENT_CHILD_VIEW })
@Observed
export class CustomCompLifecycleObserver extends ZLifecycleObserver {counter = 0onReady(context: NavDestinationContext): void {}onBackPress(): boolean {return false}onShown(info: RouterInfo): void {}onHidden(info: RouterInfo): void {}
}

在NavDestination页面的内容ChildView子组件中,可以通过@Consume来获取其实例,代码如下:

@Route({ name: RouterConstants.CUSTOM_COMPONENT_CHILD_VIEW, useTemplate: true, title: "NavDest模板化案例" })
@Component
export struct ChildView {// 通过@Consume获取生命周期观察者实例@Consume lifecycleObserver: CustomCompLifecycleObserverbuild(){Column({ space: 15 }) {...}}    }

第二种方式,在ChildView子组件的aboutToAppear()方法中通过ZRouter的addLifecycleObserver()静态方法设置监听 代码示例:

  aboutToAppear(): void {// 设置NavDest模板页面的生命周期监听ZRouter.addLifecycleObserver((state, router) => {console.log("ChildView CustomComponentView  ", state, router?.navDestinationId)if (state === LifecycleState.ON_BACK_PRESS) {// 拦截返回事件,与可以在lifecycleObserver做拦截处理if (Date.now() - this.lastBackTime < 2000 || this.lastBackTime === 0) {if (Date.now() - this.lastBackTime < 2000 ) {return false}this.lastBackTime = Date.now()ToastUtils.show("再按一次退出")return true}return false}return false})}

如果你监听返回事件时需要返回布尔值,其他状态则不需要设置返回值。

自定义NavDestination属性

新建一个类继承于ZAttributeModifier,并且用 @ZAttribute 注解声明属于哪个页面的。代码示例:

@ZAttribute({ name: RouterConstants.CUSTOM_COMPONENT_CHILD_VIEW })
export class CustomAttributeModifier extends ZAttributeModifier {initModifier(instance: NavDestinationModifier): void {instance.hideTitleBar(false)instance.mode(NavDestinationMode.STANDARD)}}

到此就完成了NavDestination页面模板化的能力,其中生命周期函数监听和自定义NavDestination属性是可选的,当前NavDestination页面模板化暂时不支持设置转场动画,后续会接入集成进去。

其他

  • 鸿蒙ZRouter动态路由框架—生命周期函数管理
  • 鸿蒙ZRouter动态路由框架—服务路由

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

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

相关文章

【AIGC】如何获取ChatGPT外部GPTs应用的提示词Prompt指令和知识库文件

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;前言&#x1f4af;获取GPTs的提示词Prompt指令&#x1f4af;获取GPTs的知识库文件&#x1f4af;小结 关于GPTs指令如何在ChatGPT上使用&#xff0c;请看这篇文章&#xff…

沐风老师3DMAX摄相机阵列插件使用方法

3DMAX摄相机阵列插件&#xff0c;从网格对象或样条线的顶点法线快速创建摄相机阵列。该插件从网格的顶点或样条线的节点获取每个摄影机的位置和方向。 3DMAX摄相机阵列插件支持目前3dMax主流的物理相机、标准相机、VRay物理相机。 【版本要求】 3dMax 2015及更高版本 【安装方…

BMC VPD格式定义

1.说明 目前遇到有2种格式的VPD定义方式&#xff0c;特记录并分享出来。 本节可参考链接下载文件: https://gitee.com/wit_yuan/fru 2.参考PCI_Express_Base_6.0a.pdf 应用范围: 例如常见的定制raid卡&#xff0c;Hba卡采用的储存serial number等。 3.参考platform-manag…

每日速记10道java面试题23-Spring篇+Springboot篇

其他资料 每日速记10道java面试题01-CSDN博客 每日速记10道java面试题02-CSDN博客 每日速记10道java面试题03-CSDN博客 每日速记10道java面试题04-CSDN博客 每日速记10道java面试题05-CSDN博客 每日速记10道java面试题06-CSDN博客 每日速记10道java面试题07-CSDN博客 每…

4K高清壁纸网站推荐

1. Awesome Wallpapers 官网: https://4kwallpapers.com/ 主题: 创意、摄影、人物、动漫、绘画、视觉 分辨率: 4K Awesome Wallpapers 提供了丰富的高质量图片&#xff0c;分为通用、动漫、人物三大类&#xff0c;可以按屏幕比例和分辨率检索&#xff0c;满足你对壁纸的各种…

小迪笔记 第四十五天 sql 注入进阶 :二次注入,堆叠注入,数据读取(load_file)加外带

二次注入 概念&#xff1a;就是我们注入的语句&#xff08;刚注入时 不会产生影响&#xff09;但是我们的恶意代码会进入数据库 他在被二次利用的时候就会进行执行 这个就是二次注入 这个的典型案例就是账号密码的修改 &#xff1a; 大家应该也知道 账号注册一般是禁止你使…

双向链表容器

C中的list是一个双向链表容器&#xff0c;用于存储一系列的元素。它提供了在任意位置插入和删除元素的能力&#xff0c;同时还支持随机访问。 在C中&#xff0c;list是由标准模板库&#xff08;STL&#xff09;提供的容器之一。它位于<list>头文件中&#xff0c;并且通过…

正则表达式去除文本中括号()<>[]里的内容

一行文本中包含有各种括号&#xff0c;如()、<>、[]&#xff0c;我们希望把括号及括号内的内容0去除&#xff0c;可以通过正则表达式来实现。 匹配() pattern r\([^)]*\) # 匹配()匹配一个左括号(&#xff0c;然后匹配0个或多个不是右括号的任意字符[^)]*&#xff0c…

单击后移动至标记

单击后移动至标记 点击生成的表单之后&#xff0c;会在地图上自动的移动到改运动锻炼的位置 如何实现 实现这个我们肯定需要点击事件&#xff0c;但是我们需要去选取一个监听的类&#xff0c;我们使用事件委托的方式来创建这个点击事件&#xff1b; 实际代码 创建点击事件 …

C# 中的异常处理:构建健壮和可靠的程序

C#中的异常处理&#xff08;Exception Handling&#xff09;。异常处理是编程中非常重要的一部分&#xff0c;它允许开发者优雅地处理程序运行时可能出现的错误或意外情况。通过有效的异常处理&#xff0c;可以使应用程序更加健壮、可靠&#xff0c;并提供更好的用户体验。以下…

C# 中?. 和 ??

在 C# 中&#xff0c;?. 和 ?? 是两个不同的操作符&#xff0c;它们用于处理可能为 null 的对象。让我们分别解释这两个操作符以及它们的组合使用&#xff1a; 1. 可空类型 (?) 在 C# 中&#xff0c;? 用于定义可空值类型&#xff08;Nullable Value Types&#xff09…

[C++]继承

继承 概念使用方法继承方式子类的构造与析构 继承的成员继承成员在子类对象里的存放顺序成员变量普通成员变量静态成员变量 成员函数普通成员函数重定义&#xff08;隐藏&#xff09; 静态成员函数友元函数 单继承与多继承概念赋值转换&#xff08;切片&#xff09;多继承带来的…

机器人构建详解:售前售后服务客服机器人与广告生成机器人的微调数据处理方法

引言 大模型&#xff08;如BERT、GPT等&#xff09;在自然语言处理任务中展现了强大的能力&#xff0c;但为了使其更贴合特定应用场景&#xff0c;通常需要进行微调。本文将详细讲解如何为售前售后服务的客服机器人和广告生成机器人准备高质量的微调数据&#xff0c;并通过具体…

8.解决跨域问题的三种方案

开启域名&#xff0c;单点登录后&#xff0c;就使用最上面的接口了

全解:Redis RDB持久化和AOF持久化

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

QILSTE H6-C210LB/5M高亮蓝光LED灯珠 发光二极管LED

在电子照明领域&#xff0c;H6-C210LB/5M&#xff0c;这款高亮蓝光LED&#xff0c;以其精确的参数和卓越的性能&#xff0c;脱颖而出。本文将通过增加文本的复杂性和长短句的交替使用&#xff0c;深入探讨这款LED的技术参数&#xff0c;以增强文章的困惑性和突发性。 **H6-C21…

使用 ASP.NET Core HttpLoggingMiddleware 记录 http 请求/响应

我们发布了一个应用程序&#xff0c;该应用程序运行在一个相当隐蔽的 WAF 后面。他们向我们保证&#xff0c;他们的产品不会以任何方式干扰我们的应用程序。这是错误的。他们删除了我们几乎所有的“自定义”标头。为了“证明”这一点&#xff0c;我构建了一个中间件&#xff0c…

回调机制详解

一、什么是回调&#xff1a; 回调是一种双向的调用模式&#xff0c;程序模块之间通过这样的接口调用完成通信联系&#xff0c;回调的核心就是回调方将本身即this传递给调用方&#xff0c;这样调用方就可以在调用完毕之后再告诉回调方它想要知道的信息。 回调函数用于层间协作&…

CUDA 计时功能,记录GPU程序/函数耗时,cudaEventCreate,cudaEventRecord,cudaEventElapsedTime

为了测试GPU函数的耗时&#xff0c;可以使用 CUDA 提供的计时功能&#xff1a;cudaEventCreate, cudaEventRecord, 和 cudaEventElapsedTime。这些函数可以帮助你测量某个 CUDA 操作&#xff08;如设置设备&#xff09;所花费的时间。 一、记录耗时案例 以下是一个示例程序&a…

ISO45001职业健康安全管理体系认证流程

前期准备 领导决策&#xff1a;企业高层领导需认识到实施 ISO 45001 体系的重要性和必要性&#xff0c;做出认证决策&#xff0c;并承诺提供必要的资源支持。成立工作小组&#xff1a;由企业各相关部门人员组成工作小组&#xff0c;明确各成员的职责和分工&#xff0c;确保工作…