vue-router4 页面跳转的时候如何一直携带地址栏的参数 例如home?code=bianma 在登陆页面手动输入code后,跳转任何路由页面都携带着code 需要如何处理
3条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在 Vue 3 项目中,可以利用
router
的全局守卫(全局前置守卫)来实现这个需求。你需要在守卫中设置一个全局状态,并将这个状态传递给每个路由。下面是一个详细的步骤和示例代码。首先,确保已经安装了 Vue Router 4:
npm install vue-router@4
然后,在
src
目录下创建一个名为router/index.js
的文件,编写以下内容:import { createRouter, createWebHistory } from 'vue-router'; import Home from '../views/Home.vue'; import LoginPage from '../views/LoginPage.vue'; const routes = [ { path: '/login', name: 'LoginPage', component: LoginPage, }, { path: '/', name: 'Home', component: Home, }, ]; function getQueryParams(url) { const queryStartIndex = url.indexOf('?'); if (queryStartIndex === -1) return {}; const queryString = url.slice(queryStartIndex + 1); return new URLSearchParams(queryString).getAll('code').reduce((params, code) => ({ ...params, code }), {}); } function setGlobalCode(code) { // 假设你有一个全局状态管理工具如 Pinia 或 Vuex,这里以 Pinia 为例。 // 如果你使用 Vuex,只需替换 store 注册和 state 访问的部分。 import { defineStore } from 'pinia'; const useAppStore = defineStore({ id: 'app', state: () => ({ globalCode: '', }), actions: { setGlobalCode(code) { this.globalCode = code; }, }, }); const appStore = useAppStore(); appStore.setGlobalCode(code); } const router = createRouter({ history: createWebHistory(), routes, }); // 全局前置守卫 router.beforeEach((to, from, next) => { const queryParams = getQueryParams(to.fullPath); if (queryParams.code) { setGlobalCode(queryParams.code); delete to.query.code; // 移除查询字符串中的 code,防止无限循环 } next(); }); export default router;
在这个例子中,我们定义了一个全局函数
getQueryParams
来从 URL 中获取查询参数。setGlobalCode
函数用于设置全局状态(这里使用 Pinia)。在全局前置守卫中,我们检查每条即将访问的路由是否有code
参数,如果有,就将其设置为全局状态,并删除路由的query
对象中的code
,以免触发无限循环。接下来,在你的应用中初始化并使用路由:
// src/main.js import { createApp } from 'vue'; import App from './App.vue'; import router from './router'; createApp(App) .use(router) .mount('#app');
这样,每次路由跳转时,都会检查是否存在
code
参数,并将其保存到全局状态。在其他组件中,你可以通过状态管理工具(如 Pinia 或 Vuex)访问这个全局状态。注意:为了演示目的,这里假设你已经在项目中设置了 Pinia。如果你使用的是 Vuex,你需要相应地调整代码。同时,如果你没有使用状态管理工具,你需要找到一种方法来存储和访问这个全局状态。
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
- ¥15 安装quartus II18.1时弹出此error,怎么解决?
- ¥15 keil官网下载psn序列号在哪
- ¥15 想用adb命令做一个通话软件,播放录音
- ¥30 Pytorch深度学习服务器跑不通问题解决?
- ¥15 部分客户订单定位有误的问题
- ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
- ¥15 Bug traq 数据包 大概什么价
- ¥15 在anaconda上pytorch和paddle paddle下载报错
- ¥25 自动填写QQ腾讯文档收集表