vue-router那些事

时间:2020-06-17 17:40:03   收藏:0   阅读:85

伴随着前端各种框架的出现,SPA(single page web application)应用势不可挡,伴随着的就是前端路由

SPA最主要的特点就是在前后端分离的基础上加了一层前端路由

前端路由的核心

改变URL, 但是页面不进行整体的刷新。那问题就来了,我该怎么做?

  1. URL的hash

URL的hash也就是锚点(#),本质上是改变window.location的href属性。

我们可以通过直接赋值location.hash来改变href,但是页面不发生刷新

技术分享图片

  1. HTML5的history模式:pushState

    history接口是HTML5新增的, 他有5种模式改变URL而不刷新页面

    • history.pushState()

      技术分享图片

    • history.replaceState()

      技术分享图片

    • history.back() | history.forward() | history.go()

      技术分享图片

      • history.back() 等价于 history.go(-1)
      • history.forward() 等价于 history.go(1)

    在讲解vue中使用vue-router改变URL不刷新页面之前,先看一下

vue-router的使用

  1. 安装vue-router
npm install vue-router --save
  1. 在模块化工程中使用它(因为是一个插件,所以通过Vue.use()来挂载插件并使用)
    1. 导入路由对象,并且调用Vue.use(VueRouter)
    2. 创建路由实例,并且传入路由映射配置
    3. 在Vue实例中挂载创建的路由实例
  2. 使用vue-router的步骤
    1. 创建路由组件
    2. 配置路由映射:组件和路径映射关系
    3. 使用路由:通过 <router-link>和<router-view>

技术分享图片

技术分享图片

技术分享图片

  1. 路由的默认路径

默认情况下,进入网站的首页,我们希望<router-view>渲染首页的内容。但是我们的实现中,默认没有显示首页组件,必须让用户点击才可以

技术分享图片

![12](/Volumes/Macintosh HD - 数据/Users/liubi_chaos_g/Pictures/12.png)

  1. HTML5的history模式

技术分享图片

router-link补充

前面的<router-link>中,我们只是使用了一个属性to,用于指定跳转的路径

<router-link>还有一些其他属性:

技术分享图片

路由代码跳转

有时候,页面的跳转可能需要执行对应的JavaScript代码,这个时候,就可以使用第二种跳转方式了

代码修改如下图

技术分享图片

动态路由

在某些情况下,一个页面的path路径可能是不确定的,比如我们进入用户界面时,希望是这样的路径/user/aaa或、user/mmm

这种path和Component的匹配关系,我们称之为动态路由(也是路由传递数据的一种方式)

  {
    path: ‘/user/:id‘,
    component: User
  }
<template>
  <div>
    <h2>我是用户页面</h2>
    <p>用户页面有下面这些信息,通过params传过来的</p>
    <h4>{{$route.params.id}}</h4>
  </div>
</template>
<router-link :to="‘/user/‘ + id">用户</router-link>
或者
<router-link to="/user/zhangsan">用户</router-link>

路由的懒加载

如图:没有使用懒加载,最终编译的文件只有四个(使用vue4.0)

技术分享图片

技术分享图片

如图:使用了路由懒加载,每个路由文件都会单独编译成一个文件

技术分享图片

技术分享图片

嵌套路由

注意点:

  // 路由配置
	{
    path: ‘/home‘,
    component: Home,
    children: [
      {
        path: ‘‘,
        redirect: ‘message‘
      },
      {
        path: ‘message‘,
        component: Message
      },
      {
        path: ‘news‘,
        component: News
      }
    ]
  }
<template>
  <div>
    <h2>我是首页</h2>
    <p>我是首页的内容</p>
    <router-link to="/home/message">未读消息</router-link>
    <router-link to="/home/news">整点新闻</router-link>

    <router-view></router-view>
  </div>
</template>

传递参数的方式

<router-link :to="{ path: ‘/profile‘, query: { name: ‘chaos‘, age: 11, hobby: ‘music‘ } }">档案</router-link>
    toProfile() {
      this.$router.push({
        path: ‘/profile‘,
        query: {
          name: ‘chaos‘,
          age: 11,
          hobby: ‘girl‘
        }
      })
    }
<template>
  <div>
    <h2>我是档案页面,我会将传递过来的参数展示到下面</h2>
    <p>这是通过params传递过来的参数{{$route.params}}</p>
    <p>这是通过query传递过来的参数{{$route.query}}</p>
  </div>
</template>

技术分享图片

$router和$route的区别

技术分享图片

导航守卫

keep-alive

原文:https://www.cnblogs.com/gchlcc/p/13153580.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!