vue-router, 嵌套路由,路由传参,导航守卫,keep-alive详解

安装和使用vue-router

步骤一: 安装vue-router
npm install vue-router --save
步骤二: 在模块化工程中使用它(因为是一个插件, 所以可以通过Vue.use()来安装路由功能)
第一步:导入路由对象,并且调用 Vue.use(VueRouter)
第二步:创建路由实例,并且传入路由映射配置
第三步:在Vue实例中挂载创建的路由实例

使用vue-router的步骤:

第一步: 创建路由组件
第二步: 配置路由映射: 组件和路径映射关系
第三步: 使用路由: 通过

import Vue from ‘vue’
import VueRouter from ‘vue-router’
Vue.use(VueRouter)
如图
创建router实例


router1.png

挂载到Vue实例中


router2.png

步骤一创建路由组件
router3.png

第二步: 配置路由映射: 组件和路径映射关系


router4.png

第三步: 使用路由: 通过


router5.png

补充路由重定向

 {
        path:'',
        redirect:'/home'
    },

默认情况下, 路径的改变使用的URL的hash.

如果希望使用HTML5的history模式, 非常简单, 进行如下配置即可:

const router = new VueRouter({
  routes,
  mode:'history'
})

router-link补充

在前面的中, 我们只是使用了一个属性: to, 用于指定跳转的路径.

还有一些其他属性:
tag: tag可以指定之后渲染成什么组件, 比如上面的代码会被渲染成一个

  • 元素, 而不是

    replace: replace不会留下history记录, 所以指定replace的情况下, 后退键返回不能返回到上一个页面中
    active-class: 当对应的路由匹配成功时, 会自动给当前元素设置一个router-link-active的class, 设置active-class可以修改默认的名称.

    在进行高亮显示的导航菜单或者底部tabbar时, 会使用到该类.
    但是通常不会修改类的属性, 会直接使用默认的router-link-active即可.

    修改linkActiveClass

    该class具体的名称也可以通过router实例的属性进行修改


    router6.png

    路由代码跳转

    有时候, 页面的跳转可能需要执行对应的JavaScript代码, 这个时候, 就可以使用第二种跳转方式了
    比如, 我们将代码修改如下:

    this.$router.push('路径')
    

    动态路由

    在某些情况下,一个页面的path路径可能是不确定的,比如我们进入用户界面时,希望是如下的路径:
    /user/aaaa或/user/bbbb
    除了有前面的/user之外,后面还跟上了用户的ID
    这种path和Component的匹配关系,我们称之为动态路由(也是路由传递数据的一种方式)

    路由的懒加载

    认识路由的懒加载

    首先, 我们知道路由中通常会定义很多不同的页面.
    这个页面最后被打包在哪里呢? 一般情况下, 是放在一个js文件中.
    但是, 页面这么多放在一个js文件中, 必然会造成这个页面非常的大.
    如果我们一次性从服务器请求下来这个页面, 可能需要花费一定的时间, 甚至用户的电脑上还出现了短暂空白的情况.
    如何避免这种情况呢? 使用路由懒加载就可以了.

    路由懒加载做了什么?
    路由懒加载的主要作用就是将路由对应的组件打包成一个个的js代码块.
    只有在这个路由被访问到的时候, 才加载对应的组件

    懒加载的方式

    const Home = () => import('../views/home/Home')
    const Shopcart = () => import('../views/shopcart/Shopcart')
    

    路由嵌套

    嵌套路由是一个很常见的功能
    比如在home页面中, 我们希望通过/home/news和/home/message访问一些内容.
    一个路径映射一个组件, 访问这两个路径也会分别渲染两个组件.

      {
        path:'/home',
        component:Home,
        children:[
          {
            path:'news',
            component:News,
          },
          {
            path:'message',
            component:Message,
          },
        ],
     
      }, 
    

    嵌套默认路径


    router7.png

    路由传参传递参数的方式

    传递参数主要有两种类型: params和query

    params的类型:

    传递的方式: 在path后面跟上对应的值
    path配置路由格式: /router/:id
    在router-link 属性to后跟 /123
    传递后形成的路径: /router/123, /router/abc

    query的类型: 直接在router-link 属性to后跟查询字符串模式

    ?id=123&name='sss'不用修改path
    传递的方式: 对象中使用query的key作为传递方式
    传递后形成的路径: /router?id=123, /router?id=abc

    获取参数

    this.$route.params
    this.$route.query
    
    
    router8.png

    方式


    linkto.png

    传递参数方式二: JavaScript代码


    jscc.png

    注意

    $route和$router是有区别的
    $router为VueRouter实例,想要导航到不同URL,则使用router.push方法
    $route为当前router跳转对象里面可以获取name、path、query、params等
    

    导航守卫

    什么是导航守卫?
    vue-router提供的导航守卫主要用来监听监听路由的进入和离开的.

    1.全局前置守卫

    使用 router.beforeEach 注册一个全局前置守卫:

    router.beforeEach((to, from, next) => {
      // ...要做的事情
    next()
    })
    

    确保要调用 next 方法,否则钩子就不会被 resolved。

    2全局后置守卫 不会接受 next 函数也不会改变导航本身:

    router.afterEach((to, from) => {
      // ...
    //不需要next()
    })
    

    3路由独享的守卫

    你可以在路由配置上直接定义 beforeEnter 守卫:

    routes: [
        {
          path: '/foo',
          component: Foo,
          beforeEnter: (to, from, next) => {
            // ...
          }
        }
      ]
    

    这些守卫与全局前置守卫的方法参数是一样的

    导航守卫补充
    https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#全局前置守卫

    keep-alive遇见vue-router

    keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
    它们有两个非常重要的属性:
    include - 字符串或正则表达,只有匹配的组件会被缓存
    exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存
    router-view 也是一个组件,如果直接被包在 keep-alive 里面,所有路径匹配到的视图组件都会被缓存:


    keepalive.png
  • 你可能感兴趣的:(vue-router, 嵌套路由,路由传参,导航守卫,keep-alive详解)