vue设置获取路由参数

本文详细介绍了在Vue中设置和获取路由参数的四种方法:通过`router-link`标签添加query和params参数,以及使用`$router.push`传递参数。总结了$router和$route的区别,并指出query和params参数的获取方式。

一、router-link 标签url直接添加参数

1、路由设置

import PageB from '@/pages/PageB'
{
    path: '/b',
    name: 'PageB',
    component: PageB
}

2、设置参数

<router-link :to="'/b?name=张三&id=1234'">路由测试</router-link>

3、获取参数

this.$route.query

二、query参数配置

1、路由设置

import PageB from '@/pages/PageB'
{
    path: '/b',
    name: 'PageB',
    component: PageB
}

2、设置参数

<router-link :to="{ name:'PageB',query:{name :'张三'} }">路由测试</router-link>
或者
<router-link :to="{ path:'/b',query:{name :'张三'} }">路由测试</router-link>

3、获取参数

this.$route.query

三、params参数配置

1、路由设置

import PageB from '@/pages/PageB'
{
    path: '/b?name=:name',
    name: 'PageB',
    component: PageB
}

注意:params方式配置路由参数时需要使用 :参数名 

2、设置参数

<router-link :to="{ name:'PageB',params:{name :'张三'} }">路由测试</router-link>

注意:params方式配置路由参数时只能写路由名(name),不能写路径(path)

3、获取参数

this.$route.params

四、$router.push 传参

1、路由设置

import PageB from '@/pages/PageB'
{
    path: '/b',
    name: 'PageB',
    component: PageB
}
或者
{
    path: '/b?name=:name',
    name: 'PageB',
    component: PageB
}

2、设置获取参数

this.$router.push({
        name: 'PageB',
        params: { id: 123, name: '李四' }
      })

this.$router.push({
        // name: 'PageB',
        path: '/b',
        query: { id: 123, name: '李四' }
      })

this.$router.push({
        name: 'PageB',
        // path: '/b',
        query: { id: 123, name: '李四' }
      })

五、总结

1、$router:路由操作对象 ,只写对象。

2、$route:路由信息对象,只读对象。

3、无论是 router-link 标签,还是 $router.push 方式。用 query 参数配置的,就用 this.$route.query 获取;用 params 参数配置的,就用 this.$route.params 获取。

4、router-link 中 params 配置的无法使用url路径(path),$router.push 中 params 配置的可以使用url路径(path)。

<think>我们是在Vue2中获取路由参数,通常使用this.$route对象。在Vue2中,我们使用Vue Router进行路由管理,可以通过this.$route来访问当前路由信息,包括参数(params和query)。 常见的获取路由参数的方式: 1. 路径参数:/user/:id -> this.$route.params.id 2. 查询参数:/user?id=123 -> this.$route.query.id 另外,在组件内,我们可以通过watch监听路由参数的变化,以便在参数变化时执行某些操作。 下面给出几种常见场景的代码示例: </think>### Vue2 获取路由参数的完整指南 在 Vue2 中获取路由参数主要有两种方式:**路径参数 (params)** 和**查询参数 (query)**。以下是详细实现方案: ```javascript // ======================== // 1. 路由配置 (router/index.js) // ======================== import Vue from 'vue' import Router from 'vue-router' import UserDetail from '@/views/UserDetail.vue' Vue.use(Router) export default new Router({ routes: [ // 路径参数示例:/user/123 { path: '/user/:id', name: 'userDetail', component: UserDetail, props: true // 启用props接收参数 }, // 查询参数示例:/search?keyword=vue { path: '/search', name: 'search', component: SearchResults } ] }) // ======================== // 2. 获取路径参数 (UserDetail.vue) // ======================== export default { // 方式1:通过 $route 对象 created() { console.log('用户ID (通过$route):', this.$route.params.id) }, // 方式2:使用 props 接收 (推荐) props: ['id'], // 接收路由参数 mounted() { console.log('用户ID (通过props):', this.id) }, // 方式3:watch监听参数变化 watch: { '$route'(to, from) { if(to.params.id !== from.params.id) { console.log('用户ID变化:', to.params.id) this.loadUserData(to.params.id) } } }, methods: { loadUserData(userId) { // 根据ID加载用户数据 } } } // ======================== // 3. 获取查询参数 (SearchResults.vue) // ======================== export default { created() { // 获取查询参数 const keyword = this.$route.query.keyword const page = this.$route.query.page || 1 // 默认值 console.log('搜索关键字:', keyword) console.log('当前页码:', page) this.performSearch(keyword, page) }, // 监听查询参数变化 watch: { '$route.query': { handler(newQuery) { this.performSearch(newQuery.keyword, newQuery.page) }, deep: true, immediate: true } }, methods: { performSearch(keyword, page) { // 执行搜索逻辑 } } } // ======================== // 4. 编程式导航获取参数 // ======================== // 在组件方法中获取 methods: { goToProduct() { // 跳转时传递参数 this.$router.push({ path: '/product/456', query: { category: 'electronics' } }) // 获取当前参数 const productId = this.$route.params.id const category = this.$route.query.category } } ``` ### 关键方法对比 | **方法** | **适用场景** | **优点** | **缺点** | |-------------------------|--------------------------------|-----------------------------------|-------------------------| | `this.$route.params` | 获取路径参数 (/user/:id) | 直接访问,简单明了 | 需要手动监听变化 | | `this.$route.query` | 获取查询参数 (?key=value) | 支持多参数,URL可见 | 参数类型都是字符串 | | **Props 接收** | 路径参数 | 组件解耦,符合Vue设计模式 | 仅支持路径参数 | | **Watch $route** | 参数变化时响应 | 精确控制参数变化逻辑 | 需要手动处理比较逻辑 | | **路由守卫** | 全局/路由级别参数处理 | 可在路由跳转前处理 | 复杂度较高 | ### 最佳实践建议 1. **路径参数 vs 查询参数** - 用路径参数(`params`)表示资源标识 (如 /product/123) - 用查询参数(`query`)表示过滤条件 (?category=book&sort=price) 2. **参数变化处理** ```javascript watch: { // 监听整个query对象的变化 '$route.query': { handler(newVal) { this.loadData(newVal) }, deep: true, immediate: true // 初始化立即执行 }, // 监听特定参数变化 '$route.params.id'(newId) { this.loadDetail(newId) } } ``` 3. **默认值处理** ```javascript const category = this.$route.query.category || 'all' const page = parseInt(this.$route.query.page) || 1 ``` 4. **路由守卫中使用** ```javascript // 全局前置守卫 router.beforeEach((to, from, next) => { if(to.params.id && !isValidId(to.params.id)) { next('/error') // 无效ID重定向 } else { next() } }) ``` 5. **动态路由匹配** ```javascript // 路由配置支持正则 { path: '/user/:id(\\d+)' } // 只匹配数字ID ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值