鸿蒙路由 HMRouter 配置及使用 三 全局拦截器使用

news/2025/3/18 20:14:47/

1、前期准备

简单封装一个用户首选项的工具类

import { preferences } from "@kit.ArkData";// 用户首选项方法封装
export class Preferences {private myPreferences: preferences.Preferences | null = null;// 初始化init(context: Context, options: preferences.Options) {this.myPreferences = preferences.getPreferencesSync(context, options);}// 获取参数getSync(key: string, defaultValue?: string) {if(this.myPreferences) {let val = this.myPreferences.getSync(key, defaultValue);return val;}else {return defaultValue;}}// 设置参数putSync(key: string, value: string) {if(this.myPreferences) {this.myPreferences.putSync(key, value)}}
}const myPreferences = new Preferences();
export { myPreferences }

在程序入口文件使用工具类

onWindowStageCreate(windowStage: window.WindowStage): void {// Main window is created, set main page for this abilityhilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate');// 初始化用户首选项工具类myPreferences.init(this.context, {name: 'myStore'})windowStage.loadContent('pages/Index', (err) => {if (err.code) {hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));return;}hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.');});}

2、创建全局登录拦截器

import { HMInterceptor, HMInterceptorAction, HMInterceptorInfo, HMRouterMgr, IHMInterceptor } from '@hadss/hmrouter';
import { myPreferences } from "../utils/Preferences"@HMInterceptor({priority: 9,interceptorName: "LoginInterceptor",global: true // 定义为全局拦截器
})
export class LoginInterceptor implements IHMInterceptor {// 路由白名单private WhiteList: string[] = ["LoginPage", "MainPage"]handle(info: HMInterceptorInfo): HMInterceptorAction {console.log("目标页面:" + info.targetName)// 如果目标地址在白名单内,则不拦截if(info.targetName && this.WhiteList.includes(info.targetName)) {console.log("白名单内,不拦截")return HMInterceptorAction.DO_NEXT;}// 获取用户tokenconst token = myPreferences.getSync("token")console.log("token", token)const isLogin: boolean = token ? true : false;// 已登录 继续向下执行if(isLogin) {console.log("已登录,继续向下执行")return HMInterceptorAction.DO_NEXT;}else {console.log("未登录,跳转到登录页面")// 未登录 跳转到登录页面HMRouterMgr.replace({pageUrl: "LoginPage",skipAllInterceptor: true // 跳过所有拦截器})// 停止执行下一个拦截器,并且不执行路由跳转动画,不执行路由栈操作return HMInterceptorAction.DO_REJECT;}}
}

3、创建登录页面

import { HMRouter, HMRouterMgr } from '@hadss/hmrouter';
import { myPreferences } from '../utils/Preferences';@HMRouter({pageUrl: "LoginPage",
})
@Component
export struct LoginPage {build() {Column() {Text("登录页面").fontSize(30).fontWeight(FontWeight.Bold)// 通过用户首选项添加测试数据 并跳转到首页Button("跳转到 - MainPage").onClick((event: ClickEvent) => {// 向用户首选项添加 验证字段myPreferences.putSync("token", "123456")HMRouterMgr.push({pageUrl: "MainPage",})})}}
}

4、首页添加测试跳转

// 测试登录拦截Button("测试登录拦截,跳转TwoPage").onClick((event: ClickEvent) => {HMRouterMgr.push({pageUrl: "TwoPage"})})

5、执行结果


http://www.ppmy.cn/news/1580151.html

相关文章

大型语言模型(LLM):解码人工智能的“语言基因“

文章目录 引言:与文字共舞的智能革命一、LLM本质解析:文字的"DNA测序"1. 语言模型的进化史2. LLM的"生物结构" 二、LLM训练全揭秘:打造语言天才的"九年义务教育"1. 数据盛宴:吞下整个互联网2. 核心…

c++入门基本知识掌握

学习要求:1.关键词 (先大致看看哪些学过 不让你背下来 就让你看看)2.命名空间 3.输入输出(cin&cout)4. 缺省参数 5.函数重载 6. 引用 7. 内联函数 8. auto关键字 还有for-each(新用法) 9…

搭建opensbi+kernel+rootfs及基本设备驱动开发流程

目录 一.编译qemu 运行opensbikernelrootfs 1.编译qemu-9.1.1 2.安装riscv64编译器 3. 编译opensbi 4.编译kernel 5.编译rootfs 设备驱动开发流程 1.安装 RISC-V 交叉编译工具链 2.驱动开发准备 3.编写简易中断控制器驱动(PLIC)​ 4.配置内核…

Python基于Django和协同过滤算法实现电影推荐系统功能丰富版

说明:这是一个系统实战项目,如需项目代码可以直接到文章最后关注获取。 项目背景 随着互联网的普及和数字娱乐内容的爆发式增长,用户在海量的电影资源中找到自己感兴趣的影片变得愈发困难。为了提升用户体验并增加用户粘性,我们…

C/C++蓝桥杯算法真题打卡(Day6)

一、P8615 [蓝桥杯 2014 国 C] 拼接平方数 - 洛谷 方法一&#xff1a;算法代码&#xff08;字符串分割法&#xff09; #include<bits/stdc.h> // 包含标准库中的所有头文件&#xff0c;方便编程 using namespace std; // 使用标准命名空间&#xff0c;避免每次调用…

Microsoft Outlook 2024 LTSC for Mac v16.95 电子邮件和日历 支持M、Intel芯片

应用介绍 Microsoft Outlook 2024 LTSC for Mac 是微软为Mac用户推出的一款电子邮件管理和日历应用&#xff0c;属于长期服务通道&#xff08;LTSC&#xff09;版本&#xff0c;适合需要稳定性和长期支持的企业用户。它提供了强大的邮件管理功能、日历功能以及团队协作工具&am…

深度学习 Deep Learning 第1章 深度学习简介

第1章 深度学习简介 概述 本章介绍人工智能&#xff08;AI&#xff09;和深度学习领域&#xff0c;讨论其历史发展、关键概念和应用。解释深度学习如何从早期的AI和机器学习方法演变而来&#xff0c;以及如何有效解决之前方法无法应对的挑战。 关键概念 1. 人工智能的演变 …