HarmonyOS鸿蒙Next中IHMInterceptor的handle和intercept有什么区别,handle是路由访问控制的,intercept呢?

HarmonyOS鸿蒙Next中IHMInterceptor的handle和intercept有什么区别,handle是路由访问控制的,intercept呢? HMrouter:IHMInterceptor的handle和intercept有什么区别,handle是路由访问控制的,intercept呢?

cke_870.png


更多关于HarmonyOS鸿蒙Next中IHMInterceptor的handle和intercept有什么区别,handle是路由访问控制的,intercept呢?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

开发者你好,两者皆是拦截器,区别是handle是同步拦截器,而intercept是异步拦截器,下列是示例代码:

@HMInterceptor({ interceptorName: 'LoginCheckInterceptor' })
export class LoginCheckInterceptor implements IHMInterceptor {
  async intercept(chain: IHMInterceptorChain): Promise<void> {
    const info = chain.getRouterInfo();
    const context = chain.getContext();
    // ...
      if (!!AppStorage.get('isLogin')) {
        await chain.onContinue()
      } else {
        info.context.getPromptAction().showToast({ message: '请先登录' });
        HMRouterMgr.push({
          pageUrl: 'loginPage',
          skipAllInterceptor: true
        });
        await chain.onIntercept();
      }
      // ...
  }
}
@HMInterceptor({ interceptorName: 'PageInterceptor' })
export class PageInterceptor implements IHMInterceptor {
  handle(info: HMInterceptorInfo): HMInterceptorAction {
    if (isLogin) {
      // 跳转下一个拦截器处理
      return HMInterceptorAction.DO_NEXT;
    } else {
      HMRouterMgr.push({
        pageUrl: 'LoginPage',
        param: { targetUrl: info.targetName },
        skipAllInterceptor: true
      })
      // 拦截结束,不再执行下一个拦截器,不再执行相关转场和路由栈操作
      return HMInterceptorAction.DO_REJECT;
    }
  }
}

更多关于HarmonyOS鸿蒙Next中IHMInterceptor的handle和intercept有什么区别,handle是路由访问控制的,intercept呢?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


IHMInterceptor是HMRouter框架的拦截器接口,用于在路由跳转过程中执行拦截逻辑,支持同步和异步两种实现方式。handle为同步拦截器方法,当使用同步路由方法时调用,intercept为异步拦截器方法,当使用异步路由方法时优先调用。

注意:至少需要实现handle或intercept方法中的一个。如果同时实现了两个方法,使用异步路由方法时会优先调用intercept方法。参考IHMInterceptor,资料来源于gitcode项目OpenHarmony-SIG/ohrouter。

在HarmonyOS鸿蒙Next中,IHMInterceptor的intercept方法用于拦截路由请求,在目标页面加载前执行自定义逻辑,如权限验证或数据预处理。而handle方法负责路由访问控制,决定是否允许跳转。两者分工明确,intercept关注请求过程中的拦截处理,handle专注于访问权限判断。

在HarmonyOS Next中,IHMInterceptorhandleintercept 方法功能区分如下:

  • handle 方法:用于路由访问控制,例如权限验证、登录状态检查等。通过返回 true(允许路由)或 false(拦截路由)来决定是否继续执行路由跳转。

  • intercept 方法:用于在路由跳转过程中插入自定义逻辑,例如修改路由参数、添加动画效果、埋点统计等。它不直接决定路由是否继续,而是对路由过程进行干预或增强。

简单总结:handle 控制“是否允许跳转”,而 intercept 控制“跳转过程中如何执行”。两者结合可实现灵活的路由管理。

回到顶部