文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

vue3路由新玩法useRoute和useRouter详解

2022-11-13 14:24

关注

原来的vue2路由是通过this.$route和this.$router来控制的。现在vue3有所变化,useRoute相当于以前的this.$route,而useRouter相当于this.$router

我们通过useRouter来手动控制路由变化

import { useRouter } from 'vue-router'
export default {
    setup() {
        const userRouter = useRouter()
        userRouter.push("/home")
    }
}

通过useRouter传参的三种方式

隐式传参params

import { useRouter } from 'vue-router'
export default {
    setup() {
        const userRouter = useRouter()
        userRouter.push({
            name: 'Home',
            params: {
                name: 'dx',
                age: 18
            }
        })
    }
}

请注意params只与name搭配生效,name就是route配置时的name

const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'Home',
    component: Home
  }
]

通过useRoute来接收params参数

import { useRoute } from 'vue-router'
export default {
    setup() {
        const route = useRoute()
        console.log(route.params)
    }
}

显式传参query

import { useRouter } from 'vue-router'
export default {
    setup() {
        const userRouter = useRouter()
        userRouter.push({
            path: '/',
            query: {
                name: 'dx',
                age: 18
            }
        })
    }
}

path与query是一对,name和params是一对,请别混用。

通过useRoute来接收query参数

import { useRoute } from 'vue-router'
export default {
    setup() {
        const route = useRoute()
        console.log(route.query)
    }
}

总结一下显式路由和隐式路由的区别

除了他们的传递和接收方式不同外

显式query会很明显的跟在新的url上,而隐式params不会

隐式params在刷新后可能会消失,我们可以在它存在的时候存如缓存中,如localstorage

隐式params比显式query相对而言更安全,不会将参数直接暴露给用户

显示query在浏览器的url上,如果你直接通过字符串的方式去取,可能会涉及转码等问题,当然useRoute将这些都处理好了,所以还是推荐通过useRoute.query去取显式路由的参数

动态路由传参

首页跟以前一样,我们在配置页面路由的时候就需要配置动态路由的名称,这里配置id

const routes: Array<RouteRecordRaw> = [
  {
    path: '/about/:id',
    name: 'About',
    component: About
  }
]

useRouter 传递动态参数id = 1 ,大多数时候动态参数都是简单数据类型,如果不是,你没必要用动态参数。

import { useRouter } from 'vue-router'
export default {
    setup() {
        const userRouter = useRouter()
        userRouter.push({
            path: '/about/1',
        })
    }
}

通过useRoute来接收动态参数的方式和params一样

import { useRoute } from 'vue-router'
export default {
    setup() {
        const route = useRoute()
        console.log(route.params)
    }
}

useRouter 的push和replace

push就是如上面的代码一样,就是在浏览器的历史记录中追加一个新的记录,你可以通过window.history看到这个记录。

而replace则是将当前的路由记录替换掉,替换后你如果回退,会发现上一个路由地址已经消失了。

import { useRouter } from 'vue-router'
export default {
    setup() {
        const userRouter = useRouter()
        userRouter.replace({
            path: '/about/1',
        })
    }
}

我在无意之间发现一个有意思的问题,也不知道是不是一个bug

import { useRouter } from 'vue-router'
export default {
    setup() {
        const userRouter = useRouter()
        userRouter.push({
            path: '/about/1',
            replace: true
        })
    }
}

当我调用push方法传入replace为true时,真的就是replace的形式,传入replace为false才恢复正常

然后我又试了一下replace

import { useRouter } from 'vue-router'
export default {
    setup() {
        const userRouter = useRouter()
        userRouter.replace({
            path: '/about/1',
            replace: false
        })
    }
}
import { useRouter } from 'vue-router'
export default {
    setup() {
        const userRouter = useRouter()
        userRouter.replace({
            path: '/about/1',
            push: true
        })
    }
}

以上两种方式都是replace的形式。

push的时候传入replace为true结果是replace,那还需要replace方法么,也不知道是不是bug。

当然了,你可能还有许多关于vue3使用路由的问题,去这里基本都可以得到解决 https://router.vuejs.org/zh/api/

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯