软件教程 2025年08月6日
0 收藏 0 点赞 770 浏览 3322 个字
摘要 :

一、初识编程式的导航 router-link是创建 a 标签来定义导航链接进行跳转,称为声明式导航,除了声明式导航,还可以借助 router 的实例方法,通过编写代码来实现,这种方……

一、初识编程式的导航

router-link是创建 a 标签来定义导航链接进行跳转,称为声明式导航,除了声明式导航,还可以借助 router 的实例方法,通过编写代码来实现,这种方式称之为编程式导航,是通过绑定click事件,调用router.方法来进行跳转,这两种方式都能实现组件之间的跳转。

二、编程式导航3种方式
1、第一种方式

语法如下:

router.push(location, onComplete?, onAbort?)

注意:在 Vue 实例内部,你可以通过 $router 访问路由实例。因此你可以调用this.$router.push

想要导航到不同的 URL,则使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。
当你点击 router-link 时,这个方法会在内部调用,所以说,点击 <router-link :to=\"...\"> 等同于调用 router.push(...)

声明式 编程式
<router-link :to=\"...\"> router.push(...)

该方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如:

// 字符串
router.push('home')

// 对象
router.push({ path: 'home' })

// 命名的路由
router.push({ name: 'user', params: { userId: '123' }})

// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})

注意:如果提供了 pathparams 会被忽略,上述例子中的 query 并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的 name 或手写完整的带有参数的 path

const userId = '123'
router.push({ name: 'user', params: { userId }}) // -> /user/123
router.push({ path: `/user/${userId}` }) // -> /user/123
// 这里的 params 不生效
router.push({ path: '/user', params: { userId }}) // -> /user

同样的规则也适用于 router-link 组件的 to 属性。

了解:在 2.2.0+,可选的在 router.push 或 router.replace 中提供 onComplete 和 onAbort 回调作为第二个和第三个参数。这些回调将会在导航成功完成 (在所有的异步钩子被解析之后) 或终止 (导航到相同的路由、或在当前导航完成之前导航到另一个不同的路由) 的时候进行相应的调用。在 3.1.0+,可以省略第二个和第三个参数,此时如果支持 Promise,router.push 或 router.replace 将返回一个 Promise。

注意: 如果目的地和当前路由相同,只有参数发生了改变 (比如从一个用户资料到另一个 /users/1 -> /users/2),你需要使用 beforeRouteUpdate 来响应这个变化 (比如抓取用户信息)。

以下项目代码接之前的项目:Vue系列入门教程(10)——vue-router路由(一)

案例代码1:字符串
1)在views目录下新增Login.vue

<template>
    <div>
        登录页面
    </div>
</template>

<script>
    export default {
        
    }
</script>

<style scoped>

</style>

2)在Header.vue的头部菜单,新增登录菜单:

<button @click="login">登录1</button>
<!-- 或 .prevent阻止原事件-->
<a href="#" @click.prevent="login">登录2</a>

script中新增login方法:

<script>
    export default {
        methods:{
            login(){
                this.$router.push("/login");
            }
        }
    }
</script>

3)在config.js中新增路由配置:

{
    path: '/login', 
    name:'Login',
    component:()=>import('@/views/Login.vue')
}

4)测试:
Vue系列入门教程(11)——vue-router路由之编程式导航
案例代码2:对象
1)修改Header.vuelogin方法如下:

<script>
    export default {
        methods:{
            login(){
                this.$router.push({path:"/login"});
            }
        }
    }
</script>

2)测试效果与案例1一样。

案例代码3:命名的路由
1)修改Header.vuelogin方法如下:

<script>
    export default {
        methods:{
            login(){
                this.$router.push(
                    {
                        name:"Login",
                        params:{username:"潘子夜",password:"123456"},
                    }
                );
            }
        }
    }
</script>

2)修改Login.vuetemplate如下:

<template>
    <div>
        <!-- 获取当前路由params参数 -->
        欢迎 {{this.$route.params.username}} 登录,您的密码是:{{this.$route.params.password}} 
    </div>
</template>

3)测试:
Vue系列入门教程(11)——vue-router路由之编程式导航
案例代码4:带查询参数
1)修改Header.vuelogin方法如下:

<script>
    export default {
        methods:{
            login(){
                this.$router.push(
                    {
                        // 相当于/login?username=潘子夜&password=123456
                        path:"/login",
                        query:{username:"潘子夜",password:"123456"}
                    }
                );
            }
        }
    }
</script>

2)修改Login.vuetemplate如下:

<template>
    <div>
        <!-- 获取当前路由query参数 -->
        欢迎 {{this.$route.query.username}} 登录,您的密码是:{{this.$route.query.password}} 
    </div>
</template>

3)测试:
Vue系列入门教程(11)——vue-router路由之编程式导航

直接拼接携带参数发送请求在此就不演示了。

2、第二种方式,语法如下:

router.replace(location, onComplete?, onAbort?)

router.push 很像,唯一的不同就是,它不会history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。

声明式 编程式
<router-link :to=\"...\" replace> router.replace(...)

测试方式:
将上面的几个案例中的this.$router.push替换为this.$router.replace,然后依次按顺序点击首页、博客、登录1,然后点击浏览器左箭头返回,发现返回的不是博客,而是首页,因为博客地址被登录1的地址替换了。
3、第三种方式,语法如下:

router.go(n)

这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)
案例代码:

// 在浏览器记录中前进一步,等同于 history.forward()
router.go(1)

// 后退一步记录,等同于 history.back()
router.go(-1)

// 前进 3 步记录
router.go(3)

// 如果 history 记录不够用,那就默默地失败呗
router.go(-100)
router.go(100)

上面的理解了,这就很简单了,这里就不去演示了。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/5857.html

管理员

相关推荐
2025-08-06

文章目录 一、Promise基础回顾 二、Promise 与 axios 结合使用场景及方法 (一)直接返回 axios …

269
2025-08-06

文章目录 一、模块初始化时的内部机制 二、常见导出写法的差异分析 (一)写法一:module.exports…

107
2025-08-06

文章目录 一、ResizeObserver详解 (一)ResizeObserver是什么 (二)ResizeObserver的基本用法 …

683
2025-08-06

文章目录 一、前期准备工作 (一)下载相关文件 (二)安装必要工具 二、处理扣子空间生成的文件…

338
2025-08-06

文章目录 一、官方文档 二、自动解包的数据类型 ref对象:无需.value即可访问 reactive对象:保持…

371
2025-08-06

文章目录 一、Hooks的工作原理 二、在if语句中使用Hook会出什么岔子? 三、React官方的Hook使用规…

843
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号