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


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

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

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

    示例:

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

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

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

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

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

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

    1. methods: {
    2. goSearch(){
    3. this.$router.push('/search');
    4. }
    5. }

    Vue3可以使用setup语法糖

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

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

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

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

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

    第一种:字符串

    给搜索框进行双向绑定keyword

    1. "###" class="searchForm">
    2. <input type="text" v-model="keyword"/>
    3. <button class="btn" type="button" @click="goSearch">搜索button>

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

    1. const routes = [
    2. {
    3. path:'/search/:keyword',
    4. component: SearchIndex,
    5. }

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

     

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

    /asd 就是 params参数

    ASD 就是 query参数

    我们可以通过输出来验证 

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

     

    第二种:模版字符串 

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

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

    第三种:对象写法

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

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

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

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

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

    1. function goSearch(){
    2. // 路由传参
    3. // 第一种:字符串形式
    4. // this.$router.push('/search/' + this.keyword + "?k=" + this.keyword.toUpperCase());
    5. // 第二种:模版字符串
    6. // this.$router.push(`/search/${this.keyword}?k=${this.keyword.toUpperCase()}`)
    7. // 第三种:对象写法
    8. this.$router.push({
    9. name:"search",
    10. params:{keyword:this.keyword},
    11. query:{k:this.keyword.toUpperCase()}
    12. })
    13. }

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

  • 相关阅读:
    [数据结构] 图---图的邻接矩阵存储方式模拟实现,包括BFS广度优先遍历和DFS深度优先遍历(上)
    MarkText快捷键(随时补充中)
    超简单理解冒泡排序
    【报错】QT Release NO CMAKE_CXX_COMPILER could be found
    QCC51XX---串口仿真协议( RFCOMM)
    使用匿名函数 回调函数处理字符串
    批量发送邮件时怎么使用蜂邮EDM与Outlook?
    C++编译过程
    【初始RabbitMQ】工作队列的实现
    LeetCode 刷题 [C++] 第236题.二叉树的最近公共祖先
  • 原文地址:https://blog.csdn.net/m0_56698268/article/details/126431355