vue路由vue-router

配置

如果在一个模块化工程中使用它,必须要通过Vue.use()明确地安装路由功能:

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

基础

Getting Started

HTML

Hello App!

Go to Foo Go to Bar

javaScript

// 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') // 现在,应用已经启动了!

动态路由匹配

通俗的讲就是,路径中包含参数,而对应的组件是一定的。在线例子

响应路由参数的变化
当使用路由参数时,原来的组件实例会被复用,组件的生命周期钩子不会再被调用。
因为两个路由都渲染同个组件,比起销毁再创建,复用显得更加高效。
复用组件时,想对路由参数的变化做出响应的话,你可以简单的watch(检测变化) $route对象

const User = {
template: '...',
watch: {
  '$route' (to, from) {
      // 对路由变化做出响应
    }
  }
}

嵌套路由

中的组件还可以包含自己的在线例子

vue路由vue-router_第1张图片
嵌套路由

上图中的嵌套结构如下所示,B1和B2就是B的子结构,在路由中通过children配置。

- A
|  --- B
|   | ------B1
|   | ------B2
|  --- C

编程式导航

导航的两种方式

  • 创建a标签
  • router的实例方法
方法 功能
router.push(location) 向history栈添加新的记录
router.replace(location) 替换当前的history记录
router.go(n) 在history记录中向前后者后退多少步

命名路由

通过名称标识路由。
创建Router实例的时候,在routes配置中给某个路由设置名称(name)。

命名视图

界面中可以拥有多个单独命名的视图,而不是只有一个单独的出口()
如果router-view没有设置名字,那么默认为default

进阶

导航钩子

导航表示路由正在发生改变。vue-router提供的导航钩子主要用来拦截导航,让它完成跳转或取消。

全局钩子

钩子 用法
router.beforeEach() 导航之前调用
router.afterEach() 导航之后调用,不能改变导航

路由独享的钩子

钩子 用法
router.beforeEnter() 进入此导航

组件内的钩子

钩子 用法
router.beforeRouteEnter() 在渲染该组件的对应路由被confirm前调用。
不能获取组件实例this,因为当钩子执行前,组件实例还没被创建
router.beforeRouteUpdate() 在当前路由改变,但是该组件被复用时调用。
router.beforeRouteLeave() 导航离开该组件的对应路由时调用。

路由元信息

定义路由的时候可以配置meta字段
通过$route.matched数组来检查路由记录中的meta字段。

to.matched.some()

过渡动效

所有路由


  

单个路由
在路由组件内使用并设置不同的name

基于路由的动态过渡

你可能感兴趣的:(vue路由vue-router)