# arouter-api-onActivityResult **Repository Path**: openharmony-tpc/arouter-api-onActivityResult ## Basic Information - **Project Name**: arouter-api-onActivityResult - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 16 - **Forks**: 19 - **Created**: 2022-02-21 - **Last Updated**: 2025-04-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 🚨 **重要提示 | IMPORTANT** > > **⚠️ 此代码仓已归档。新地址请访问 [arouter-api-onActivityResult](https://gitcode.com/openharmony-tpc/arouter-api-onActivityResult)。| ⚠️ This repository has been archived. For the new address, please visit [arouter-api-onActivityResult](https://gitcode.com/openharmony-tpc/arouter-api-onActivityResult).** > --- > # Arouter ## 简介 Arouter是一款轻量且高效的适用于OpenHarmony的页面路由工具。 - 支持页面间路由跳转; - 支持带参数跳转及回调; - 支持配置跳转拦截器; - 支持预处理跳转与否; - 支持跨模块路由跳转。 ## 效果图 ![img.gif](img.gif) ## 下载安装 ```` ohpm install @ohos/arouteronactivityresult ```` OpenHarmony ohpm 环境配置等更多内容,请参考[如何安装 OpenHarmony ohpm 包](https://gitee.com/openharmony-tpc/docs/blob/master/OpenHarmony_har_usage.md) ## 使用说明 ### 路由跳转 #### 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(postcard:Postcard):boolean{ return true } } ``` 在跳转前调用.setPretreatmentService() 方法,将 pretreatmentService传入 setPretreatmentService()方法中完成预处理功能。 ``` Arouter.getInstance() .build(this.router) .setPretreatmentService(pretreatmentService) .navigationWithCallback(callback) ``` #### 6.跨模块路由跳转 api10+ 1. 需要在当前应用包的oh-package.json5文件中配置依赖。例如: ``` "dependencies": { "@ohos/libraryOne": "file:../libraryOne", ... } ``` 2. 在跳转的目标页面内,给@Entry修饰的自定义组件EntryOptions命名 ``` @Entry({ routeName: 'myPageOne' }) @Component struct Index { ... } ``` 3. 在触发跳转的页面内引入目标页面,并使用Arouter ``` import '@ohos/library/src/main/ets/pages/Index'; ... Arouter.getInstance() .build("myPageOne",true) .setGreenChannel(true) .navigation() ... ``` ## 接口说明 ### Arouter |方法名|入参|接口描述| |:----|:----|:----| |build|(string,boolean) | 配置页面跳转路径(必填),是否跨页面跳转(非必填默认为false) | |withParams|{ }|传入另一页面的参数| |navigation| |正常跳转| |navigationWithCallback|NavigationCallback|带回调跳转| |setGreenChannel|boolean|配置是否为绿色通道| |registerInterceptor|iInterceptor|注册拦截器| |unregisterInterceptor| |移除拦截器| |getNavigationCallback| |获取状态回调方法| |setUri|string|设置页面跳转路径| |getUri| |获取跳转的页面路径| |getParams| |获取跳转传递的参数| |getTag| |获取标签| |setTag|{ }|设置标签| |withFlags|boolean|设置flags| |getFlags|boolean|获得flags| |toString| |导出字符串| |setPretreatmentService|PretreatmentService|预处理| |getPostcard|页面路径|找到指定的postcard| ### 回调接口 |接口名|入参|接口描述| |:---:|:---:|:---:| |NavigationCallback.onArrival|Postcard|到达回调地| |NavigationCallback.onInterrupt|Postcard|回调中断| |NavigationCallback.onActivityResult|any|回调结果| |IInterceptor.process|Postcard,InterceptorCallback|拦截过程| |InterceptorCallback.onContinue|Postcard|拦截器回调继续| |InterceptorCallback.onInterrupt|Postcard|拦截器回调暂停| |PretreatmentService.onPretreatment|Postcard|预处理实现| ## 约束与限制 在下述版本验证通过: DevEco Studio: NEXT Release(5.0.3.900), SDK: API12 (5.0.0.71) DevEco Studio 5.0.1 Release(5.0.5.306), SDK: API10 (4.0.0) ## 目录结构 ```` |---- arouteronactivityresult | |---- src/main/ets/components/arouter # 路由跳转实现逻辑 | |---- index.ets # 对外接口 ```` ## 贡献代码 使用过程中发现任何问题都可以提 [Issue](https://gitee.com/openharmony-tpc/arouter-api-onActivityResult/issues)给组件 ,当然,也非常欢迎发 [PR](https://gitee.com/openharmony-tpc/arouter-api-onActivityResult/pulls)共建 。 ## 开源协议 本项目基于 [Apache License 2.0](https://gitee.com/openharmony-tpc/arouter-api-onActivityResult/blob/master/LICENSE) ,请自由地享受和参与开源。