# arouter-api-onActivityResult_1 **Repository Path**: liyuefeng77/arouter-api-onActivityResult_1 ## Basic Information - **Project Name**: arouter-api-onActivityResult_1 - **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-03-30 - **Last Updated**: 2022-03-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 简介 ### 当前可运行SDK版本号为:Version 7及以上 ### 当前可运行IDE版本号为:DevEco Studio 3.1 Beta及以上 Arouter主要用于在各种应用或页面间的跳转和页面间的数据传递,其中包含跳转拦截和状态回调等功能,使用简单,操作灵活。 ## 目录 ``` /entry/src/ - main/ets/default - api # 对外接口展示目录 - arouter # 创建路由及跳转 - interceptorService # 路由拦截 - logisticsCenter # 清空拦截器路由 - navigationCallback # 回调接口 - postcard # 传参及功能方法 - pretreatmenService #预处理接口 - arouter # arouter组件目录 - arouter # 创建路由及跳转 - interceptorService # 路由拦截 - logisticsCenter # 清空拦截器路由 - navigationCallback # 回调接口 - postcard # 传参及功能方法 - pretreatmenService #预处理接口 - pages # 测试page页面列表 - index # 测试首页 - transit # 接收参数及回调参数页面 - returnTo # 开启拦截器页面 ``` ## 接口说明 ### 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|预处理实现| ## 使用说明 ### 先引入Arouter文件,然后调用Arouter.getInstance()创建路由对象,然后使用.build、.withParams配置路由路径、传参等,最后使用.navigation或.navigationWithCallback进行跳转。 1, 路由跳转:先使用build方法配置路由跳转路径,然后使用navigation方法进行页面跳转 ```javascript import {Arouter} from "../arouter/arouter"; Arouter.getInstance() .build("--/--") .navigation() ``` 2, 路由传参:如需传参则在build之后使用withParams方法进行传参 ```javascript import {Arouter} from "../arouter/arouter"; Arouter.getInstance() .build("--/--") .withParams({index:"--"}) .navigation() ``` 3, 路由回调:需要跳转回调则使用navigationWithCallback方法,在页面1中实现NavigationCallback接口 ```typescript import {NavigationCallback} from '../arouter/navigationCallback' 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, 路由拦截(全局路由拦截):使用拦截器先引入 Postcard 类和 InterceptorCallback 接口,实现 IInterceptor 拦截接口,在 process 方法中实现页面拦截,选择 onContinue 继续跳转或 onInterrupt 中断跳转。(需要开启拦截器) ```typescript import {Postcard} from '../arouter/postcard'; import {InterceptorCallback,IInterceptor} from '../arouter/interceptor'; 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); } } } ``` 效果: ![img.png](img.png) 5, 开启拦截器:先引入registerInterceptor方法,然后传入iInterceptor(4 实现的)接口,在事件或生命周期中添加该方法。 ```javascript import {registerInterceptor} from '../arouter/interceptor'; registerInterceptor(iInterceptor) ``` 6, 关闭拦截器:先引入unregisterInterceptor方法,在事件或生命周期中添加该方法,直接调用即可。 ```javascript import {unregisterInterceptor} from '../arouter/interceptor'; unregisterInterceptor() ``` 7, 绿色通道:在跳转前使用setGreenChannel方法跳过拦截(true:跳过拦截)。 ```javascript Arouter.getInstance() .build("--/--") .setGreenChannel(true) .navigation() ``` 8, 预处理:实现 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) ```