vue路由URL拼接全局参数

在Vue单页面项目中,为实现URL地址栏拼接固定参数,本文通过vue-router的history模式展示了如何在全局前置守卫router.beforeEach中进行路由拦截处理。代码示例展示了动态拼接参数的方法,适用于需要在部分路径使用这些参数的情况。

vue-router地址栏URL拼接全局参数

业务需求:
vue单页面项目,需要在URL地址栏拼接固定的参数,在所有页面使用。默认采用vue路由的history模式;hash模式也可以同样适用。
主要是在 vue-router 导航守卫的全局前置守卫中实现。即 vue-router 生命周期钩子函数 router.beforeEach 中进行路由拦截处理。
主要代码:

router.beforeEach((to, from, next) => {
   
   
    if (Object.k
### Vue 3 和 UniApp 中路由传递与接收参数的方法 #### 在 Vue 3 中通过路由传递和接收参数 Vue Router 是 Vue.js 官方支持的路由管理工具,在 Vue 3 中,可以通过 `params` 或 `query` 来传递数据。 ##### 使用 Query 参数 Query 参数是一种简单的 URL 查询字符串方式,适合传递少量的数据。 发送端代码示例: ```javascript this.$router.push({ path: '/target', query: { id: '123', name: 'example' } }); ``` 接收端代码示例: ```javascript export default { mounted() { const id = this.$route.query.id; const name = this.$route.query.name; console.log(id); // 输出:123 console.log(name); // 输出:example } }; ``` 上述代码展示了如何在目标页面中解析并获取传递过来的查询参数[^2]。 ##### 使用 Params 参数 Params 参数通常用于动态路径匹配,适用于更复杂的场景。 发送端代码示例: ```javascript this.$router.push({ name: 'TargetRouteName', params: { id: '123', name: 'example' } }); ``` 注意:如果使用的是命名路由,则需要指定 `name` 属性;如果是静态路径,则需手动拼接路径。 接收端代码示例: ```javascript export default { props: ['id', 'name'], // 如果组件绑定了 prop 则可以直接注入 created() { console.log(this.id); // 输出:123 console.log(this.name); // 输出:example } }; ``` #### 在 UniApp 中通过路由传递和接收参数 UniApp 提供了类似的机制来处理跨页面之间的参数传递问题。 ##### 使用 Query 参数 发送端代码示例: ```javascript uni.navigateTo({ url: '/pages/targetPage/targetPage?id=123&name=example' }); ``` 接收端代码示例: ```javascript export default { onLoad(options) { console.log(options.id); // 输出:123 console.log(options.name); // 输出:example } }; ``` 这需要注意的是,`onLoad` 生命周期函数会自动接收来自上一页面传递的所有参数,并将其作为对象形式提供给开发者[^1]。 ##### 多个参数的传递 当需要一次性传递多个复杂结构化的数据时,建议先序列化成 JSON 字符串再进行编码操作后再附URL 上面去。例如: 发送端代码示例: ```javascript const data = encodeURIComponent(JSON.stringify({ key1: 'value1', key2: 'value2' })); uni.navigateTo({ url: `/pages/targetPage/targetPage?data=${data}` }); ``` 接收端代码示例: ```javascript export default { onLoad(options) { try { const parsedData = decodeURIComponent(options.data); const jsonData = JSON.parse(parsedData); console.log(jsonData.key1); // 输出:value1 console.log(jsonData.key2); // 输出:value2 } catch (e) { console.error('Failed to parse data:', e); } } }; ``` #### 路由拦截器的应用 无论是 Vue 还是 UniApp,都可以利用路由守卫功能实现某些特定需求下的逻辑控制,比如权限验证等。 对于 Vue 项目而言,可以在 main.js 文件定义全局导航钩子: ```javascript import { createRouter, createWebHistory } from 'vue-router'; const routes = [...]; const router = createRouter({ history: createWebHistory(), routes, }); router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !isAuthenticated()) { next('/login'); } else { next(); } }); function isAuthenticated() { return false; // 替换为实际认证状态判断逻辑 } export default router; ``` 而对于 UniApp 应用来说,则是在 app.vue 文件或者单独创建一个 utils/router-guard.js 文件来进行配置: ```javascript // 假设存在 loginStatus 变量表示当前用户的登录情况 if (!loginStatus && getCurrentPages().length === 0) { uni.reLaunch({ url: '/pages/login/login' }); } ``` 以上就是关于 Vue 3 和 UniApp 下路由参数交互以及基本路由拦截的知识点介绍[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值