0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【开源三方库】Arouter:一款轻量、高效的页面路由工具

OpenAtom OpenHarmony 来源:未知 2023-11-24 21:15 次阅读

点击蓝字 ╳ 关注我们

开源项目 OpenHarmony是每个人的 OpenHarmony wKgaomVgowKABhtvAABG3jYJR5o827.jpg

孙澳

OpenHarmony知识体系组

简介

Arouter是一款适用于OpenAtom OpenHarmony(以下简称“OpenHarmony”)的轻量高效的页面路由工具,相比原生的路由方案,Arouter更有优势。传统的路由方案使用显示Intent和隐式Intent进行跳转,会存在一些问题。使用显式Intent耦合度过高,而使用隐式Intent集中式管理Path会导致协作困难。Arouter采用自定义的路由方案,通过解析标准URL进行跳转,避免了直接依赖的问题。使用分布式管理页面配置,解决了集中式管理Path的问题,整个路由跳转过程更加透明,具有更好的扩展性。Arouter相比原生路由方案,具有更低的耦合度、更好的协作性和控制拦截能力,同时采用分布式管理页面配置,提供了更好的扩展性,目前支持SDK:OpenHarmony API Version 10版本。

效果图

wKgaomVgowOAMnJnAFUxibk44kI804.gif  

使用说明

Arouter支持以下功能:

●支持页面间路由跳转;

●支持带参数跳转及回调;

●支持配置跳转拦截器;

●支持预处理跳转与否;

路由跳转

1.不传参跳转通过Arouter.getInstance()创建路由对象,使用链式调用方法 build('')配置跳转的页面,navigation() 方法进行页面跳转。
import {Arouter} from "@ohos/arouteronactivityresult";
Arouter.getInstance()    
 .build("--/--")  //需要跳转的地址    
 .navigation()

2.传参跳转在不传参跳转的基础上,跳转之前通过withParams()进行参数配置。
import {Arouter} from "@ohos/arouteronactivityresult";
Arouter.getInstance()    
 .build("--/--")  //需要跳转的地址    
 .withParams({index:"--"})    
.navigation()
3.路由回调路由回调需要配合NavigationCallback接口进行,在路由前的页面实现NavigationCallback接口
import {NavigationCallback} from '@ohos/arouteronactivityresult'
var callback:NavigationCallback = {    
 onInterrupt(postcard){},    
 onArrival(postcard){},    
 onActivityResult(data){}
}
然后将callback传入 .navigationWithCallback()中进行跳转
import {Arouter} from "@ohos/arouteronactivityresult";
Arouter.getInstance()    
 .build("--")//需要跳转的地址    
.navigationWithCallback(callback)
在目标页面的onPageShow()生命周期中调用getPostcard()方法获取到指定的postcard
import router from '@ohos.router';
if (postcard == null) { 
 postcard =  Arouter.getInstance().getPostcard(router.getState().path+router.getState().name);   
}
使用 postcard.getNavigationCallback() 方法调用对应的回调方法,即可回调源页面实现的方法
postcard.getNavigationCallback().onActivityResult(params)

路由拦截

1.配置拦截器在拦截器中的process()方法中实现页面的拦截,通过interceptorCallback.onInterrupt()中断跳转,interceptorCallback.onContinue()继续跳转。
import {Postcard,IInterceptor,InterceptorCallback} from '@ohos/arouteronactivityresult';
var iInterceptor:IInterceptor= {
    process(postcard:Postcard, interceptorCallback:InterceptorCallback) {
        // 选择拦截的页面,若跳转时有该路径则进行拦截提示,若没有则直接跳转
        if (Postcard.getUri() == 'pages/transit') {
            // 选择弹框
            AlertDialog.show(
                {
                    message: '被拦截了,点击继续跳转',
                    primaryButton: {
                        value: '取消',
                        action: () => {
                            // 中断跳转
                         interceptorCallback.onInterrupt(postcard)
                        }
                    },
                    secondaryButton: {
                        value: '继续',
                        action: () => {
                            // 继续跳转
                        interceptorCallback.onContinue(postcard);
                        }
                    },
                }
            )
        } else {
            // 继续跳转
            interceptorCallback.onContinue(postcard);
        }
    }
}
2.注册拦截器
import {registerInterceptor} from '@ohos/arouteronactivityresult';
registerInterceptor(iInterceptor);
3.移除拦截器
import {unregisterInterceptor} from '@ohos/arouteronactivityresult';
unregisterInterceptor()
4.配置绿色通道在跳转前使用.setGreenChannel()方法跳过拦截(true:跳过拦截)。
Arouter.getInstance()
    .build("--/--")//需要跳转的地址
    .setGreenChannel(true)
.navigation()
5.配置预处理跳转与否预处理:实现 PretreatmentService 接口中 onPretreatment 方法,并返回一个Boolean值(true:继续跳转,false:不跳转)。
import {PretreatmentService} from '@ohos/arouteronactivityresult';
var pretreatmentService:PretreatmentService = {
  onPretreatment(postcardboolean{
    return true
  }
}

在跳转前调用.setPretreatmentService() 方法,将 pretreatmentService传入 setPretreatmentService()方法中完成预处理功能。

Arouter.getInstance()
    .build(this.router)
    .setPretreatmentService(pretreatmentService)
.navigationWithCallback(callback)

接口说明

ArouterwKgaomVgowOAaJS8AABZ7zRyQvI888.png  回调接口wKgaomVgowOAFdW9AAA0dzkOMPk424.png  

下载安装

ohpminstall@ohos/arouteronactivityresult

源码链接

https://gitee.com/openharmony-tpc/arouter-api-onActivityResult


原文标题:【开源三方库】Arouter:一款轻量、高效的页面路由工具

文章出处:【微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    57

    文章

    2347

    浏览量

    42827
  • OpenHarmony
    +关注

    关注

    25

    文章

    3717

    浏览量

    16288

原文标题:【开源三方库】Arouter:一款轻量、高效的页面路由工具

文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    鸿蒙Flutter实战:05-使用第三方插件

    # 鸿蒙Flutter 实战:使用第三方插件 在鸿蒙Flutter开发中,如果涉及到使用原生功能,就要使用插件。使用插件有两种方式,种是自己编写原生ArkTS代码,在Dart侧调用。另外
    发表于 10-22 21:54

    瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入法

    本文适用于触觉智能所有支持Android11系统的开发板修改第三方输入法为默认输入法。本次使用的是触觉智能的Purple Pi OH鸿蒙开源主板,搭载了瑞芯微RK3566芯片,类树莓派设计,是Laval官方社区主荐的一款鸿蒙开发
    的头像 发表于 09-24 09:43 433次阅读
    瑞芯微RK3566鸿蒙开发板Android11修改第<b class='flag-5'>三方</b>输入法为默认输入法

    开源鸿蒙】使用QEMU运行OpenHarmony系统

    本文将会介绍如何从源码安装QEMU 6.2.0,以及如何使用QEMU运行OpenHarmony系统。通过本文,你将会对QEMU和OpenHarmony系统又
    的头像 发表于 09-14 08:51 560次阅读
    【<b class='flag-5'>开源</b>鸿蒙】使用QEMU运行OpenHarmony<b class='flag-5'>轻</b><b class='flag-5'>量</b>系统

    ​介绍一款Java开发的开源MES系统

    ​介绍一款Java开发的开源MES系统,万界星空科技开源的MES系统。该系统基于Java开发,具有广泛的适用性和高度的可定制性,能够满足不同行业、不同规模企业的智能制造需求。
    的头像 发表于 09-05 17:39 646次阅读
    ​介绍<b class='flag-5'>一款</b>Java开发的<b class='flag-5'>开源</b>MES系统

    鸿蒙开发接口UI界面:【@ohos.router (页面路由)】

    本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 > - 页面路由需要在页面渲染完成之后才能调用,在onInit和onReady生命周期中
    的头像 发表于 05-28 16:26 935次阅读
    鸿蒙开发接口UI界面:【@ohos.router (<b class='flag-5'>页面</b><b class='flag-5'>路由</b>)】

    微软或将开放Xbox主机授权给第三方厂商

    据悉,5 月 26 日,知名媒体 Windows Central 的编辑 Jez Corden 揭露了微软即将遵循第三方手柄流程,允许在其 XBOX 主机上引入第三方产品。
    的头像 发表于 05-27 15:18 656次阅读

    Labview如何内嵌操作第三方EXE程序!

    自己在网上搜了下相关资料,能把第三方EXE内嵌进入容器里,但是有个问题,这个第三方软件必须手动拖到容器正中间,手动最大化。请问有什么方法可以自动实现吗? 下图是我内嵌的POLL 软件。如图!
    发表于 04-18 14:26

    如何挑选一款性价比高的家用路由

    家庭网络已经成为人们生活中不可或缺的部分。而选择一款性价比高的家用路由器对于保障网络连接质量、提升网络体验至关重要。本文将从性能、覆盖范围、安全性、易用性和价格等方面,为您介绍如何挑选一款
    的头像 发表于 04-16 15:14 522次阅读

    鸿蒙OS开发学习:【第三方调用】

    在Stage模型中,如何调用已经上架到[三方中心]的社区和项目内创建的本地
    的头像 发表于 04-14 11:34 910次阅读
    鸿蒙OS开发学习:【第<b class='flag-5'>三方</b><b class='flag-5'>库</b>调用】

    三方检测业数字化营销:KPI精选与高效之道

    数字化营销管理过程,通过科技研发、检测分析,输出技术解决方案或第三方检测报告,属脑力密集型行业,如何激发大脑贡献更多知识能量,高效满足客户需求,难免涉及众多KPI关键绩效指标,选择哪些KPI来衡量
    的头像 发表于 04-12 08:33 302次阅读
    第<b class='flag-5'>三方</b>检测业数字化营销:KPI精选与<b class='flag-5'>高效</b>之道

    Meta Quest头显将支持多款安卓第三方应用并行

    Meta已悄然启动了与此相关的功能,意味着Quest头显可同时操作多个第三方Android应用。在此之前,Quest对第三方Android应用有严格限制,用户每次仅能打开个,无法实现同屏幕并行多个第
    的头像 发表于 03-11 10:58 743次阅读

    MacPaw将于4月在欧洲市场推出Setapp第三方应用商城

    3月1日报道,知名厂商MacPaw于今日发表声明,宣称其自有的第三方应用商城Setapp将进军欧洲市场,发布会定于今年4月举行,并且官网预告了可供用户试用的候选页面,以吸引更多人参与到Setapp移动版本Beta的测试中来。
    的头像 发表于 03-01 10:16 562次阅读

    分享个据说是比Wget、Curl更强大的下载工具

    aria2 是一款高效的命令行下载工具。堪称下载利器!
    的头像 发表于 02-20 10:24 842次阅读
    分享<b class='flag-5'>一</b>个据说是比Wget、Curl更强大的下载<b class='flag-5'>工具</b>!

    源译识 | 译文分享:ASF第三方开源组件许可证政策

    /translation.  译文全文 (双语对照版请浏览文末“阅读原文”) 目的 本政策向Apache软件基金会的项目提供许可指引,列出了第三方开源
    的头像 发表于 01-05 19:50 834次阅读
    源译识 | 译文分享:ASF第<b class='flag-5'>三方</b><b class='flag-5'>开源</b>组件许可证政策

    【坚果派】JS开源适配OpenHarmony系列——第期实操

    由于OpenHarmony应用是基于ArkTS开发,而ArkTS是在保持TypeScript(简称TS)基础语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。因此在开发OpenHarmony三方时,建议首选在成熟的JS/TS
    的头像 发表于 12-26 10:48 1170次阅读
    【坚果派】JS<b class='flag-5'>开源</b><b class='flag-5'>库</b>适配OpenHarmony系列——第<b class='flag-5'>一</b>期实操