vue-router,vue路由简介

女爷i 2022-11-04 01:57 268阅读 0赞

(一)命名路由

命名路由是目前开发当中使用最频繁的形式

通过一个名称 name:属性来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候,可以直接指定name值进行跳转

这就是一个最简单的命名路由

  1. import Vue from "vue";
  2. import Router from "vue-router";
  3. import HelloWorld from "@/components/HelloWorld";
  4. Vue.use(Router);
  5. let router = new Router({
  6. routes: [
  7. {
  8. path: "/",
  9. name: "HelloWorld",
  10. // 两种方式引入跳转的组件
  11. component: HelloWorld,
  12. // component: ()=>import("@/components/HelloWorld"),
  13. },
  14. ]
  15. });
  16. export default router

(二)声明式,编程式导航

除了使用 <router-link>创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。(通过 $router 访问路由实例)

当你点击 <router-link> 时,这个方法(this.$router.push)会在内部调用,所以说,点击 <router-link :to="..."> 等同于调用 router.push(...)














声明式 编程式
<router-link :to=”…”> router.push(…)
  1. // 字符串,这里应该是一个地址字符串
  2. this.$router.push('home')
  3. // 对象,和router中定义的path匹配
  4. this.$router.push({ path: 'home' })
  5. // 命名的路由,和router中定义的name,和上面的命名路由联动
  6. this.$router.push({ name: 'user', params: { userId: '123' }})
  7. // 带查询参数,变成 /register?plan=private
  8. this.$router.push({ path: 'register', query: { plan: 'private' }})

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

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

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

(三)动态路由

(四)嵌套路由

实际生活中的应用界面,通常由多层嵌套的组件组合而成。
嵌套路由也是为了解决这一点

  1. const router = new VueRouter({
  2. routes: [
  3. {
  4. path: "/user/:id",
  5. component: User,
  6. children: [
  7. {
  8. // 当 /user/:id/profile 匹配成功,
  9. // UserProfile 会被渲染在 User 的 <router-view> 中
  10. path: "profile",
  11. component: UserProfile
  12. },
  13. {
  14. // 当 /user/:id/posts 匹配成功
  15. // UserPosts 会被渲染在 User 的 <router-view> 中
  16. path: "posts",
  17. component: UserPosts
  18. }
  19. ]
  20. }
  21. ]
  22. });

最典型的就是这种侧边栏,展开后会有更多选项,每个选项都是,组件,的小路由
在这里插入图片描述

(五)重定向和别名

1 . 路由的重定向

通常搭配通配符 * 一起使用,用于当地址栏所输入的地址和你设置的路由都不匹配时,重定向到指定的页面,如登录页,404页之类的

  1. {
  2. path: "*",
  3. name: "any",
  4. // 重定向到登录页
  5. redirect:'/login',
  6. component: Login,
  7. },

2 . 路由的别名
访问['/routerOne', '/routerTwo', '/routerThree']中的任何一个都和访问 /routerAny 一样

  1. {
  2. path: "/routerAny",
  3. name: "any",
  4. // 别名
  5. // alias: '/routerOne',
  6. alias: ['/routerOne', '/routerTwo', '/routerThree'],
  7. component: Login,
  8. },

(六)路由传参

(七)导航守卫

1 . 全局前置守卫
路由导航守卫,是为了路由跳转之前做的检查,及操作
它是跳转触发的,任何路由跳转都会触发

路由导航守卫可以让我们对用户要跳转的路由做一次检查,符合条件后放行,不符合条件则强制用户跳转至指定页面。

主要作用为,防止未登录的用户,在地址栏输入地址,跳过登录,进入页面

to: Route: 即将要进入的目标 路由对象
from: Route: 当前导航正要离开的路由
next: Function: 一定要调用该方法来 resolve 这个钩子。

  1. router.beforeEach((to, from, next) => {
  2. // 想办法获取token,一般都是存储在vuex中
  3. let isLogin = window.sessionStorage.getItem("token");
  4. // 存在token就让他登录,跳转到登录页写好的跳转地址
  5. if (isLogin) {
  6. // 放行,继续执行接下来的路由跳转
  7. next();
  8. }
  9. // 否则就让他跳转到登录页
  10. else {
  11. if (to.path === "/login") {
  12. next();
  13. } else {
  14. alert("没有访问权限或登录已过期,请重新登录!");
  15. next("/login");
  16. }
  17. }
  18. });

2 . 组件内的守卫

主要应用场景为,有些页面是不需要登录的,但是当进入到指定页面后,该页面是需要登录后才能看到的

发表评论

表情:
评论列表 (有 0 条评论,268人围观)

还没有评论,来说两句吧...

相关阅读

    相关 IP__静态

    .静态路由的优缺点:   优点:对于路由器的CPU没有管理性开销,它意味着如果你不使用动态路由选择的话,你可能应该购买更为便宜的路由器。在路由器之间没有带宽占用,它意味...

    相关 vue-router,vue简介

    (一)命名路由 命名路由是目前开发当中使用最频繁的形式 通过一个名称 name:属性来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候,可以直