Vue2和Vue3的路由跳转及路由传参

首先,路由跳转的方法有两种:

声明式导航: router-link (务必要有to属性),可以实现路由跳转

编程式导航: 利用的是组件实例的$router.push|replace方法,可以实现路由的跳转 (可以书写一些自己的业务)

示例:

点击logo按钮,跳转到home页 (声明式)

                <router-link class="logo" to="/home">
                    <img src="./images/logo.png" alt="">
                </router-link>

点击搜索按钮,执行跳转( goSearch )  (编程式)

<button class="btn" type="button" @click="goSearch">搜索</button>

这里的话,Vue2和Vue3写法有点不一样

Vue2中就是methods里面定义goSearch()

methods: {
    goSearch(){
        this.$router.push('/search');
    }
}

Vue3可以使用setup语法糖

<script>
import { useRouter } from 'vue-router'
export default {
    name: 'HeaderIndex',
    setup(){
        const $router = useRouter()

        // method
        function goSearch(){
            $router.push('/search');
        }
        return {
            goSearch
        }
        
    }
}
</script>

接着再写一下路由传参,那参数一共有2种:

params参数: 属于路径当中的一部分,需要注意,在配置路由的时候,需要占位

query参数: 不属于路径当中的一部分,类似于ajax中的queryString /home?k=v$kv=,不需要占位

比如,在搜索框中输入一些内容,点击搜索按钮,完成路由传参跳转

接下来都是以Vue3中为例,最后再写上vue2中的相应代码

第一种:字符串

给搜索框进行双向绑定keyword

<form action="###" class="searchForm">
    <input type="text" v-model="keyword"/>
    <button class="btn" type="button" @click="goSearch">搜索</button>
</form>

首先,如果要使用params参数的话,需要配置路由时进行占位

const routes = [
    {
        path:'/search/:keyword',
        component: SearchIndex,
    }

然后使用字符串形式传递参数

<script>
import { useRouter } from 'vue-router'
import {ref} from 'vue'
export default {
    name: 'HeaderIndex',
    setup(){
        const $router = useRouter()
        let keyword = ref('')
        // method
        function goSearch(){
            // 路由传参
            // 第一种:字符串形式
            $router.push('/search/' + keyword.value + "?k=" + keyword.value.toUpperCase());
        }
        return {
            goSearch,
            keyword
        }
        
    }
}
</script>

 

 因为我们使用了ref,所以接收参数的时候要 .value来获取,不然是读不到的。

/asd 就是 params参数

ASD 就是 query参数

我们可以通过输出来验证 

我在SearchIndex.vue中通过模版字符串将它显示

<template>
  <div>
    我是搜索
    <h1>params参数---{{$route.params.keyword}}</h1>
    <h1>query参数---{{$route.query.k}}</h1>
  </div>
</template>

 

第二种:模版字符串 

 这种写法比第一种字符串形式会简单一些,要替换的就是下面这串,其余不变。就是用模版字符串来代替字符串拼接而已

// 第二种:模版字符串
$router.push(`/search/${keyword.value}?k=${keyword.value.toUpperCase()}`)

第三种:对象写法

这种写法是最常用的,也是最直观的

但如果使用对象写法,并且还是用的params参数,就不能用path形式了,而是要用name形式

router/index.js中对search的路由添加name。不再使用path 

	{
        path:'/search/:keyword',
        component: SearchIndex,
        meta:{show:true},
        name:"search"
    }
function goSearch(){
            console.log(keyword.value);
            // 路由传参
            // 第一种:字符串形式
            // $router.push('/search/' + keyword.value + "?k=" + keyword.value.toUpperCase());
            // 第二种:模版字符串
            // $router.push(`/search/${keyword.value}?k=${keyword.value.toUpperCase()}`)
            // 第三种:对象写法
            $router.push({
                name:"search",
                params:{keyword:keyword.value},
                query:{k:keyword.value.toUpperCase()}
            })
        }

而Vue2中的写法其实大同小异,就是没有setup和ref。

function goSearch(){
            // 路由传参
            // 第一种:字符串形式
            // this.$router.push('/search/' + this.keyword + "?k=" + this.keyword.toUpperCase());
            // 第二种:模版字符串
            // this.$router.push(`/search/${this.keyword}?k=${this.keyword.toUpperCase()}`)
            // 第三种:对象写法
            this.$router.push({
                name:"search",
                params:{keyword:this.keyword},
                query:{k:this.keyword.toUpperCase()}
            })
        }

就是访问keyword时需要this访问,并且由于没有ref以后也不需要加上value了

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3中路由传参的方式有很多种,包括通过params属性传递参数,通过props属性传递参数,也可以通过query属性传递参数。以下是具体的实现方法: 1. 通过params属性传递参数 使用params属性进行路由传参的方式比较常见。在路由跳转时,通过params属性将参数传递给目标组件。在目标组件中,可以通过$route.params访问到传递过来的参数。 实现代码如下: // 在路由配置中,定义name属性和params属性 const routes = [ { path: '/user/:id', name: 'user', component: User, props: true, // 通过params传递参数 params: { name: '张三', age: 18 } } ] // 在跳转时,传递参数 this.$router.push({ name: 'user', params: { id: 1 } }) // 在目标组件中,访问参数 export default { name: 'User', props: { name: String, age: Number }, created() { // 通过$route.params访问参数 console.log(this.$route.params) // 输出{id: 1} console.log(this.name, this.age) // 输出"张三"和18 } } 2. 通过props属性传递参数 除了通过params属性传递参数外,Vue 3还可以通过props属性传递参数。这样做的好处是可以使用组件化开发的方式,在跳转页面时直接将组件传递给router-view标签。 实现代码如下: // 在路由配置中,定义name属性和props属性 const routes = [ { path: '/user', name: 'user', component: User, // 通过props传递参数 props: { id: 1, name: '张三', age: 18 } } ] // 在跳转时,传递组件 this.$router.push({ name: 'user', props: true }) // 在目标组件中,定义props和模板 export default { name: 'User', props: { id: Number, name: String, age: Number }, template: ` <div> <p>{{ name }}</p> <p>{{ age }}</p> </div> ` } 3. 通过query属性传递参数 另外,还可以通过query属性传递参数。这种方式与params属性类似,只是在路由配置和传递参数时需要使用query属性。 实现代码如下: // 在路由配置中,定义name属性和query属性 const routes = [ { path: '/user', name: 'user', component: User, // 通过query传递参数 query: { id: 1, name: '张三', age: 18 } } ] // 在跳转时,传递参数 this.$router.push({ name: 'user', query: { id: 2 } }) // 在目标组件中,访问参数 export default { name: 'User', created() { // 通过$route.query访问参数 console.log(this.$route.query) // 输出{id: 2, name: "张三", age: 18} } } 综上所述,Vue 3提供了多种路由传参的方式,开发者可以根据自己的需求选择不同的方式进行路由跳转和传参。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值