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

更多关于HarmonyOS鸿蒙Next中IHMInterceptor的handle和intercept有什么区别,handle是路由访问控制的,intercept呢?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者你好,两者皆是拦截器,区别是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 的 handle 和 intercept 方法功能区分如下:
-
handle方法:用于路由访问控制,例如权限验证、登录状态检查等。通过返回true(允许路由)或false(拦截路由)来决定是否继续执行路由跳转。 -
intercept方法:用于在路由跳转过程中插入自定义逻辑,例如修改路由参数、添加动画效果、埋点统计等。它不直接决定路由是否继续,而是对路由过程进行干预或增强。
简单总结:handle 控制“是否允许跳转”,而 intercept 控制“跳转过程中如何执行”。两者结合可实现灵活的路由管理。


