前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HarmonyOS 开发实践 —— 基于Navigation的路由拦截管理

HarmonyOS 开发实践 —— 基于Navigation的路由拦截管理

原创
作者头像
小帅聊鸿蒙
发布2024-11-25 14:22:42
发布2024-11-25 14:22:42
1920
举报
文章被收录于专栏:鸿蒙开发笔记鸿蒙开发笔记

路由拦截是开发中常见场景,比如校验用户是否登录、路由拦截添加弹窗等。通过setInterception可以实现这些功能,该需求主要用于路由拦截前调用开发者设置的拦截回调,和拦截回调里开发者返回处理后需要跳转的页面信息。

场景一:判断用户是否登录。

方案

设置并开启页面路由拦截registerInterception,通过全局变量LocalStorage判断用户当前是否登录,未登录时点击购物车会被拦截并跳转至登录页,输入用户名和密码后将LocalStorage改为true表示已登录,然后跳转至购物车。

核心代码

设置willShow页面跳转前拦截,当从首页跳转(即typeof from === "string")时,如果此时登录状态为false(!this.storageLink)且目标页为购物车(target.pathInfo.name === 'pageTwo'),则会将跳转的目标页pop,然后跳转至登录页登录。

代码语言:ts
复制
registerInterception() {
  let loginIntercept:InterceptionShowCallback = (from: NavDestinationContext | "navBar", to: NavDestinationContext | "navBar") => {
    if (!this.isUseInterception) {
      return;
    }
    if (typeof from === 'string') {
      let target: NavDestinationContext = to as NavDestinationContext;
      console.log("source page is navigation home");
      if (!this.storageLink && target.pathInfo.name === 'pageTwo') {
        target.pathStack.pop();
        target.pathStack.pushPathByName('pageOne', null);
      }
    }
  }
}

场景二:返回时弹出确认弹窗。

方案

设置并开启页面路由拦截registerInterception,如果用户未完成预约直接返回,会进行路由拦截并弹出确认弹窗是否确认返回。

核心代码

设置willShow页面跳转前拦截,判断当从预约页返回时(source.pathInfo.name === 'appointPageTwo'),会进行路由拦截并弹出确认框是否返回首页,选择确认则clear清栈返回首页。

代码语言:ts
复制
registerInterception() {
  let loginIntercept: InterceptionShowCallback = (from: NavDestinationContext | "navBar", to: NavDestinationContext | "navBar") => {
      if (!this.isUseInterception) {
        return;
      } else {
        //其他destination跳转destination的拦截
        let source: NavDestinationContext = from as NavDestinationContext;
        if (source.pathInfo.name === 'appointPageTwo') {
          console.info("test" + source.pathInfo.name)
          source.pathStack.pushPathByName('appointPageTwo', null, false);
          this.dialog.open()
        }
      }
    }
  this.pageInfos.setInterception({
    willShow: loginIntercept
  })
}

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:

  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力;
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识;
  • 想要获取更多完整鸿蒙最新学习知识点,可关注B站:码牛课堂;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 场景一:判断用户是否登录。
  • 场景二:返回时弹出确认弹窗。
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档