# arouter-api-onActivityResult_2 **Repository Path**: liyuefeng77/arouter-api-onActivityResult_2 ## Basic Information - **Project Name**: arouter-api-onActivityResult_2 - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 19 - **Created**: 2022-06-27 - **Last Updated**: 2022-06-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #arouter-api-onActivityResult ## 简介 Arouter主要是对多个页面之间以及应用之间的路由跳转,可以用来进行不同页面之间的跳转,同时进行参数的传递, 将参数回调于上一个页面。在此基础上增加了拦截器,可以选择是否跳转至下一页面,以及预处理,通过判断是否进行 是否跳转。 ##效果图 ![img.gif](img.gif) ##下载安装 ```` npm install @ohos/arouteronactivityresult --save ```` 参考安装教程 [如何安装OpenHarmony npm包](https://gitee.com/openharmony-tpc/docs/blob/master/OpenHarmony_npm_usage.md) ## 使用说明 ### 先引入Arouter文件,然后调用Arouter.getInstance()创建路由对象,然后使用.build、.withParams配置路由路径、传参等,最后使用.navigation或.navigationWithCallback进行跳转。 1. 路由跳转:先使用build方法配置路由跳转路径,然后使用navigation方法进行页面跳转 ```javascript import {Arouter} from "@ohos/arouteronactivityresult"; Arouter.getInstance() .build("--/--") //需要跳转的地址 .navigation() ``` 2. 路由传参:如需传参则在build之后使用withParams方法进行传参 ```javascript import {Arouter} from "@ohos/arouteronactivityresult"; Arouter.getInstance() .build("--/--") //需要跳转的地址 .withParams({index:"--"}) .navigation() ``` 3. 路由回调:需要跳转回调则使用navigationWithCallback方法,在页面1中实现NavigationCallback接口 ```typescript import {NavigationCallback} from '@ohos/arouteronactivityresult' var callback:NavigationCallback = { onInterrupt(postcard){}, onArrival(postcard){}, onActivityResult(data){} } ``` 然后将callback传入navigationWithCallback中进行跳转 ```javascript Arouter.getInstance() .build("--")//需要跳转的地址 .navigationWithCallback(callback) ``` 在页面2调用接口,在struct外定义变量postcard用来接收postcard,然后在onPageShow生命周期中调用getPostcard方法获取到指定的postcard 并赋值给postcard。 ```javascript if (postcard == null) { postcard = Arouter.getInstance().getPostcard(router.getState().path + router.getState().name); } ``` 然后使用 postcard.getNavigationCallbcak() 调用相应接口方法 ```javascript postcard.getNavigationCallbcak().onActivityResult(params) ``` 在页面1中onActivityResult()中获取回调的参数 4.路由拦截 4.1 开启拦截器:先引入registerInterceptor方法,然后传入iInterceptor(4 实现的)接口,在事件或生命周期中添加该方法。 ```javascript import {registerInterceptor} from '@ohos/arouteronactivityresult'; registerInterceptor(iInterceptor) ``` 4.2 路由拦截(全局路由拦截):使用拦截器先引入 Postcard 类和 InterceptorCallback 接口,实现 IInterceptor 拦截接口,在 process 方法中实现页面拦截,选择 onContinue 继续跳转或 onInterrupt 中断跳转。(需要开启拦截器) ```typescript import {Postcard} from '@ohos/arouteronactivityresult'; import {InterceptorCallback,IInterceptor} 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 { // 中断跳转 callback.onContinue(postcard); } } } ``` 4.3 关闭拦截器:先引入unregisterInterceptor方法,在事件或生命周期中添加该方法,直接调用即可。 ```javascript import {unregisterInterceptor} from '@ohos/arouteronactivityresult'; unregisterInterceptor() ``` 4.4 绿色通道:在跳转前使用setGreenChannel方法跳过拦截(true:跳过拦截)。 ```javascript Arouter.getInstance() .build("--/--")//需要跳转的地址 .setGreenChannel(true) .navigation() ``` 4.5 预处理:实现 PretreatmentService 接口中 onPretreatment 方法,并返回一个Boolean值(true:继续跳转,false:不跳转)。 ```typescript var pretreatmentService:PretreatmentService = { onPretreatment(postcard:Postcard):boolean{ return true } } ``` 在跳转前调用setPretreatmentService 方法,将 PretreatmentService 传入 setPretreatmentService 中。 ```javascript Arouter.getInstance() .build(this.router) .setPretreatmentService(pretreatmentService) .navigationWithCallback(callback) ``` ## 接口说明 ### Arouter |方法名|入参|接口描述| |:---:|:---:|:---:| |build|string|配置页面跳转路径| |withParams|{ }|传入另一页面的参数| |navigation| |正常跳转| |navigationWithCallback|NavigationCallback|跳转回调| |setGreenChannel|boolean|是否是绿色通道| |registerInterceptor|iInterceptor|开启拦截器| |unregisterInterceptor| |关闭拦截器| |getNavigationCallbcak| |获取状态回调方法| |setUri|string|设置页面跳转路径| |getUri| |获取跳转的页面路径| |getParams| |获取跳转传递的参数| |getTag| |获取标签| |setTag|{ }|设置标签| |withFlags|boolean|设置flags| |getFlags|boolean|获得flags| |toString| |导出字符串| |setPretreatmentService|PretreatmentService|预处理| |getPostcard|本页面路径|找到指定的postcard| |接口名|入参|接口描述| |:---:|:---:|:---:| |NavigationCallback.onFound|Postcard|寻找页面路径| |NavigationCallback.onLost|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 3.1 Beta及以上 ,SDK版本号为Version 7以上。 ``` ## 目录结构 ```` |---- arouter-api-onActivityResult | |---- entry # 示例代码文件夹 | |---- arouter # arouter-api-onActivityResult库文件夹 | |---- index.ets # 对外接口 | |---- README.MD # 安装使用方法 ```` ## 贡献代码 使用过程中发现任何问题都可以提 [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) ,请自由地享受和参与开源。