vue router 路由

1.基础路由

HTML

<template>
  <div>
	  <h1>基础路由</h1>
	  <p>
	    <!-- 使用 router-link 组件来导航. -->
	    <!-- 通过传入 `to` 属性指定链接去往哪个路由 -->
	    <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
	    <router-link to="/foo">Go to Foo</router-link>
	    <router-link to="/bar">Go to Bar</router-link>
	  </p>
	  <!-- <router-view> 路由出口,路由匹配到的组件将渲染在这里 -->
	  <router-view></router-view>
  </div>
</template>

JS

import Vue from "vue";
import VueRouter from "vue-router";
import Foo from "../views/Foo.vue";
import Bar from "../views/Bar.vue";

Vue.use(VueRouter);

// 每个路由应该映射一个组件。 其中"component" 可以是通过 Vue.extend() 创建的组件构造器,或者,只是一个组件配置对象。
const routes = [
  { path: '/foo', component: Foo },
  { path: '/bar', component: Bar }
]

// 创建 router 实例,然后传 `routes` 配置
const router = new VueRouter({
  routes,
});

// 导出router实列
export default router;

我们可以在任何组件内通过 this.$ router 访问路由器,也可以通过 this.$ route 访问当前路由:

export default {
  computed: {
    username() {
      // 我们很快就会看到 `params` 是什么
      return this.$route.params.username
    }
  },
  methods: {
    goBack() {
      window.history.length > 1 ? this.$router.go(-1) : this.$router.push('/')
    }
  }
}

2.嵌套路由

这里App.vue的 < router-view > 是最顶层的出口,渲染最高级路由匹配到的组件,此处有一个< Tab >组件,在开发项目时请不要再此处放组件,我放在此处只是为了方便查看
在这里插入图片描述
同样地,一个被渲染组件同样可以包含自己的嵌套 < router-view >。例如,在 router 组件的模板添加一个 < router-view >:
在这里插入图片描述
要在嵌套的出口中渲染组件,需要在 VueRouter 的参数中使用 children 配置:
在这里插入图片描述


3.动态路由匹配

我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件。例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。在某些情况下,一个页面的path路径可能是不确定的,比如我们进入用户界面时,希望是如下的路径:/user/1或/user/2,除了有前面的/user之外,后面还跟上了用户的ID(1、2)。这就是动态路由,即一个组件页面匹配不同的路劲

在这里插入图片描述

如下图所示此处的路由id是2,即访问的路由就是router/2
在这里插入图片描述

请留心这里的参数 this.$ route、this.$ router、以及通配符 “*”
在这里插入图片描述


4.编程式的导航

除了使用 < router-link to ="… " > 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,this.$ router.push("/xxx ")

声明式导航 | < router-link :to="…">
编程式导航 | this.$router.push("/xxx ")

// 编程式导航有如下几种方式进行添加导航
// 1.字符串,变成 /home
this.$router.push('home')
// 2.对象,变成 /home
this.$router.push({ path: 'home' })
// 3.命名的路由,变成 /user/123
this.$router.push({ name: 'user', params: { userId: '123' }})
// 4.带查询参数,变成 /register?plan=private
this.$router.push({ path: 'register', query: { plan: 'private' }})
// 5.这里的 params 不生效,path和params这里组合不行
router.push({ path: '/user', params: { userId }}) // -> /user

注意:path和params组合不生效

  1. this.$router.push(location, onComplete?, onAbort?)
// 这个方法会向 history 栈添加一个新的记录,所以,
// 当用户点击浏览器后退按钮时,则回到之前的 URL。
  1. this.$router.replace(location, onComplete?, onAbort?)
// 跟 router.push 很像,唯一的不同就是,它不会向 history 添加新记录,
// 而是跟它的方法名一样 —— 替换掉当前的 history 记录。
  1. this.$router.go(n)
// 这个方法的参数(n)是一个整数,意思是在 history 记录中向前或者后退多少步
// 在浏览器记录中前进一步,等同于 history.forward()
router.go(1)

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

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

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

5.命名路由

有时候,通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候。你可以在创建 Router 实例的时候,在 routes 配置中给某个路由设置名称。

const router = new VueRouter({
  routes: [
    {
      path: '/user/:userId',
      name: 'user',
      component: User
    }
  ]
})

要链接到一个命名路由,可以给 router-link 的 to 属性传一个对象:

// 此处的url等于: user/123
<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
//这跟代码调用 router.push() 是一回事:
this.$router.push({ name: 'user', params: { userId: 123 } })

这两种方式都会把路由导航到 /user/123 路径。


6.命名视图

在这里插入图片描述

7.重定向和别名

重定向
在这里插入图片描述
别名
在这里插入图片描述


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值