从零开始的vue学习笔记(八)

前言

今天花一天时间阅读完Vue Router的官方文档的基础部分,简单的做一下总结和记录

 Vue Router是什么

Vue Router 是 Vue.js 官方的路由管理器,用于构建单页应用(SPA)。地址栏url的变化并不会去发请求去服务器取新的页面,而是按需加载局部组件,看起来就像无刷新一样。包括的功能包括:

  • 嵌套的路由/视图表
  • 模块化的、基于组件的路由配置
  • 路由参数、查询、通配符
  • 基于 Vue.js 过渡系统的视图过渡效果
  • 细粒度的导航控制
  • 带有自动激活的 CSS class 的链接
  • HTML5 历史模式或 hash 模式,在 IE9 中自动降级
  • 自定义的滚动条行为

实际上路由的用途是用路由配置表来控制 url 对应的跳转地址,地址对应的可以是基础视图组件或者布局组件,可以用于灵活的视图导航。

安装

  • 直接下载 / CDN
    下载地址:https://unpkg.com/vue-router/dist/vue-router.js
    然后通过js引入进来:

      
      
  • NPM

    安装npm包:

      npm install vue-router

    然后通过Vue.use()引入:

      import Vue from 'vue'
      import VueRouter from 'vue-router'
    
      Vue.use(VueRouter)

基本用法

Vue Router的API和Vuex类似,new VueRouter 构建出一个路由实例,然后提供了 组件用于写链接, 组件用于展示,Router的构建选项中最重要的就是 routes ,它用来定义路由的规则。

一个简单的路由例子:

  
  

  

Hello App!

Go to Foo Go to Bar

  // 0. 如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)

  // 1. 定义 (路由) 组件。
  // 可以从其他文件 import 进来
  const Foo = { template: '
foo
' } const Bar = { template: '
bar
' } // 2. 定义路由 // 每个路由应该映射一个组件。 其中"component" 可以是 // 通过 Vue.extend() 创建的组件构造器, // 或者,只是一个组件配置对象。 // 我们晚点再讨论嵌套路由。 const routes = [ { path: '/foo', component: Foo }, { path: '/bar', component: Bar } ] // 3. 创建 router 实例,然后传 `routes` 配置 // 你还可以传别的配置参数, 不过先这么简单着吧。 const router = new VueRouter({ routes // (缩写) 相当于 routes: routes }) // 4. 创建和挂载根实例。 // 记得要通过 router 配置参数注入路由, // 从而让整个应用都有路由功能 const app = new Vue({ router }).$mount('#app') // 现在,应用已经启动了!

动态路由

通过使用:动态路径参数来做动态路由,使用通配符 (*)来匹配任意路径,作为捕获任意路径和404路径。详细请参考:链接地址

嵌套路由

路由是支持嵌套的,routes中的 children 配置用来写嵌套路由配置,然后嵌套的路由可以在组件的 做嵌套展示。

编程式的导航

除了使用 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。主要采用router.push(location, onComplete?, onAbort?)这个方法,另外还提供了router.replace(location, onComplete?, onAbort?)router.go(n)这两个不常用的方法,具体用法参考:链接地址

命名路由

除了直接用 path 指定路由的路径外,可以用 name 给路由取一个别名方便使用,具体参考:链接

命名视图

可以给视图也取名字方便使用, router-view 组件的 name 属性指定,不给的话默认为 default 名字的。

重定向和别名

重定向也是通过 routes 配置来完成,配置采用 redirect 。例子:

  const router = new VueRouter({
  routes: [
      { path: '/a', redirect: '/b' }
    ]
  })

别名采用 alias 来命名。

路由组件传参

使用 props 将组件和路由解耦,让路由可以传参数给组件,达到动态配置目的。例子:

  const User = {
  props: ['id'],
    template: '
User {{ id }}
' } const router = new VueRouter({ routes: [ { path: '/user/:id', component: User, props: true }, // 对于包含命名视图的路由,你必须分别为每个命名视图添加 `props` 选项: { path: '/user/:id', components: { default: User, sidebar: Sidebar }, props: { default: true, sidebar: false } } ] })

props 可以是布尔、对象和函数,具体用法参考:链接地址

HTML5 History 模式

vue-router 默认 hash 模式 ,会让url地址里面带有#符号,非常丑陋而且让锚点语法无法使用,所以需要 history 模式,例子:

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

路由懒加载

结合 Vue异步组件Webpack 的代码分割功能,轻松实现路由组件的懒加载(路由被访问的时候才加载对应组件)。例子:

  routes: [
    {
      path: "/user",
      component: () =>
        import(/* webpackChunkName: "layout" */ "./layouts/UserLayout")
    }
  ]

路由的其他主题

其他主题包括:

  • 导航守卫
  • 路由元信息
  • 过渡动效
  • 数据获取
  • 滚动行为
  • Router API

对于这些主题,感兴趣的可以再点击链接学习,根据2/8定律,不作为学习的重点,用到再看。

你可能感兴趣的:(从零开始的vue学习笔记(八))