Vue路由管理器Vue-router的使用方法详解

router-link

<router-link> 组件支持用户在具有路由功能的应用中点击导航。 通过 to 属性指定目标地址,默认渲染成带有正确链接的 <a> 标签,可以通过配置 tag 属性生成别的标签。另外,当目标路由成功激活时,链接元素自动设置一个表示激活的 CSS 类名

<router-link> 比起写死的 <a href="..." rel="external nofollow" > 会好一些。无论是 HTML5 history 模式还是 hash 模式,它的表现行为一致,所以,当切换路由模式,或者在 IE9 降级使用 hash 模式,无须作任何变动;在 HTML5 history 模式下,router-link 会拦截点击事件,让浏览器不再重新加载页面;在 HTML5 history 模式下使用 base 选项之后,所有的 to 属性都不需要写基路径了

props

to(required)

类型 string | Location

表示目标路由的链接。当被点击后,内部会立刻把 to 的值传到 router.push(),所以这个值可以是一个字符串或者是描述目标位置的对象

 <!-- 字符串 -->
 <router-link to="home">Home</router-link>
 <!-- 渲染结果 -->
 <a href="home" rel="external nofollow" >Home</a>
 <!-- 使用 v-bind 的 JS 表达式 -->
 <router-link v-bind:to="'home'">Home</router-link>
 <!-- 不写 v-bind 也可以,就像绑定别的属性一样 -->
 <router-link :to="'home'">Home</router-link>
 <!-- 同上 -->
 <router-link :to="{ path: 'home' }">Home</router-link>
 <!-- 命名的路由 -->
 <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
 <!-- 带查询参数,下面的结果为 /register?plan=private -->
 <router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link>

replace

类型: boolean

默认值: false

设置 replace 属性的话,当点击时,会调用 router.replace() 而不是 router.push(),于是导航后不会留下 history 记录

<router-link :to="{ path: '/abc'}" replace></router-link>

append

类型: boolean

默认值: false

设置 append 属性后,则在当前(相对)路径前添加基路径。例如,从 /a 导航到一个相对路径 b,如果没有配置 append,则路径为 /b,如果配了,则为 /a/b

<router-link :to="{ path: 'relative/path'}" append></router-link>

tag

类型: string

默认值: "a"

有时想要 <router-link> 渲染成某种标签,例如 <li>。 于是使用 tag prop 类指定何种标签,同样它还是会监听点击,触发导航

 <router-link to="/foo" tag="li">foo</router-link>
 <!-- 渲染结果 -->
 <li>foo</li>

active-class

类型: string

默认值: "router-link-active"

设置链接激活时使用的 CSS 类名。默认值可以通过路由的构造选项 linkActiveClass 来全局配置

exact

类型: boolean

默认值: false

是否激活默认类名的依据是 inclusive match (全包含匹配)。 举个例子,如果当前的路径是 /a 开头的,那么 <router-link to="/a"> 也会被设置 CSS 类名

按照这个规则,<router-link to="/"> 将会点亮各个路由。想要链接使用 "exact 匹配模式",则使用 exact 属性

 <!-- 这个链接只会在地址为 / 的时候被激活 -->
 <router-link to="/" exact>

events

类型: string | Array<string>

默认值: 'click'

声明可以用来触发导航的事件。可以是一个字符串或是一个包含字符串的数组

将"激活时的CSS类名"应用在外层元素

有时候要让 "激活时的CSS类名" 应用在外层元素,而不是 <a> 标签本身,那么可以用 <router-link> 渲染外层元素,包裹着内层的原生 <a> 标签:

<router-link tag="li" to="/foo">
 <a>/foo</a>
</router-link>

在这种情况下,<a> 将作为真实的链接(它会获得正确的 href 的),而 "激活时的CSS类名" 则设置到外层的 <li>

router-view

<router-view> 组件是一个 functional 组件,渲染路径匹配到的视图组件。<router-view> 渲染的组件还可以内嵌自己的 <router-view>,根据嵌套路径,渲染嵌套组件

属性

name

类型: string

默认值: "default"

如果 <router-view>设置了名称,则会渲染对应的路由配置中 components 下的相应组件

行为表现

其他属性(非 router-view 使用的属性)都直接传给渲染的组件, 很多时候,每个路由的数据都是包含在路由参数中。

因为它也是个组件,所以可以配合 <transition> 和 <keep-alive> 使用。如果两个结合一起用,要确保在内层使用 <keep-alive>:

<transition>
 <keep-alive>
  <router-view></router-view>
 </keep-alive>
</transition>

路由信息对象

一个 route object(路由信息对象) 表示当前激活的路由的状态信息,包含了当前 URL 解析得到的信息,还有 URL 匹配到的 route records(路由记录)

route object 是 immutable(不可变) 的,每次成功的导航后都会产生一个新的对象。route object 出现在多个地方,包括如下

1、组件内的 this.$route 和 $route watcher 回调(监测变化处理)

2、router.match(location) 的返回值

3、导航钩子的参数

router.beforeEach((to, from, next) => {
 // to 和 from 都是 路由信息对象
})

4、scrollBehavior 方法的参数

const router = new VueRouter({
 scrollBehavior (to, from, savedPosition) {
  // to 和 from 都是 路由信息对象
 }
})

属性

$route.path

类型: string

字符串,对应当前路由的路径,总是解析为绝对路径,如 "/foo/bar"

$route.params

类型: Object

一个 key/value 对象,包含了 动态片段 和 全匹配片段,如果没有路由参数,就是一个空对象

$route.query

类型: Object

一个 key/value 对象,表示 URL 查询参数。例如,对于路径 /foo?user=1,则有 $route.query.user = 1,如果没有查询参数,则是个空对象

$rout.hash

类型: string

当前路由的 hash 值 (带 #) ,如果没有 hash 值,则为空字符串

$route.fullPath

类型: string

完成解析后的 URL,包含查询参数和 hash 的完整路径

$route.matched

类型: Array<RouteRecord>

一个数组,包含当前路由的所有嵌套路径片段的 路由记录 。路由记录就是 routes 配置数组中的对象副本(还有在 children 数组)

const router = new VueRouter({
 routes: [
  // 下面的对象就是 route record
  { path: '/foo', component: Foo,
   children: [
    // 这也是个 route record
    { path: 'bar', component: Bar }
   ]
  }
 ]
})

当 URL 为 /foo/bar,$route.matched 将会是一个包含从上到下的所有对象(副本)

$route.name

当前路由的名称,如果有的话

Router构造配置

routes

类型: Array<RouteConfig>

RouteConfig 的类型定义:

declare type RouteConfig = {
 path: string;
 component?: Component;
 name?: string; // for named routes (命名路由)
 components?: { [name: string]: Component }; // for named views (命名视图组件)
 redirect?: string | Location | Function;
 alias?: string | Array<string>;
 children?: Array<RouteConfig>; // for nested routes (嵌套路由)
 beforeEnter?: (to: Route, from: Route, next: Function) => void;
 meta?: any;
}

mode

类型: string

默认值: "hash" (浏览器环境) | "abstract" (Node.js 环境)

可选值: "hash" | "history" | "abstract"

配置路由模式

1、hash: 使用 URL hash 值来作路由。支持所有浏览器,包括不支持 HTML5 History Api 的浏览器

2、history: 依赖 HTML5 History API 和服务器配置

3、abstract: 支持所有 JavaScript 运行环境,如 Node.js 服务器端。如果发现没有浏览器的 API,路由会自动强制进入这个模式

base

类型: string

默认值: "/"

应用的基路径。例如,如果整个单页应用服务在 /app/ 下,然后 base 就应该设为 "/app/"

linkActiveClass

类型: string

默认值: "router-link-active"

全局配置 <router-link> 的默认『激活 class 类名』

scrollBehavior

类型: Function

签名:

(
 to: Route,
 from: Route,
 savedPosition?: { x: number, y: number }
) => { x: number, y: number } | { selector: string } | ?{}

Router实例

属性

router.app

类型: Vue instance

配置了 router 的 Vue 根实例

router.mode

类型: string

路由使用的 模式

router.currentRoute

类型: Route

当前路由对应的路由信息对象

方法

router.beforeEach(guard)

router.beforeResolve(guard) (2.5.0+): 此时异步组件已经加载完成

router.afterEach(hook):增加全局的导航钩子

router.push(location, onComplete?, onAbort?)

router.replace(location, onComplete?, onAbort?)

router.go(n)

router.back()

router.forward():动态的导航到一个新 url

router.getMatchedComponents(location?)

返回目标位置或是当前路由匹配的组件数组(是数组的定义/构造类,不是实例)。通常在服务端渲染的数据预加载时

router.resolve(location, current?, append?)

解析目标位置(格式和 <router-link> 的 to prop 一样),返回包含如下属性的对象

{
location:Location;
route:Route;
href:string;
}
router.addRoutes(routes) 

动态添加更多的路由规则。参数必须是一个符合 routes 选项要求的数组

router.onReady(callback)

添加一个会在第一次路由跳转完成时被调用的回调函数。此方法通常用于等待异步的导航钩子完成,比如在进行服务端渲染的时候

对组件注入

注入的属性

通过在 Vue 根实例的 router 配置传入 router 实例,下面这些属性成员会被注入到每个子组件

$router

router 实例

$route

当前激活的路由信息对象。这个属性是只读的,里面的属性是 immutable(不可变) 的,不过可以 watch(监测变化) 它

【允许的额外配置】

beforeRouteEnter
beforeRouteLeave

更多关于Vue路由管理器Vue-router的文章请查看下面的相关链接

(0)

相关推荐

  • 详解vue-router 动态路由下子页面多页共活的解决方案

    我们都知道 vue-router 的动态路由匹配对组件是原地复用的策略,需要我们在组件中根据不同的 $route 参数展示不同的数据,这在大部分情景下是很高效的做法,但这无疑增加了组件的复杂度,而且不同参数间切换因为是同组件复用,切换效果不加修饰的话会显得很生硬,这里放一张图片感受一下. 如果我们希望能够每个动态参数都能渲染出一个组件而不是去复用怎么办呢? 我这里提供一个简便的方案 通常动态路由我们都是用来处理详情页 const router = new VueRouter({ routes:

  • vue-router之实现导航切换过渡动画效果

    过渡动效 提供了transition的封装组件,添加过渡动画,通过添加或删除css类名来实现. 过渡的css类名: v-enter 进入过渡的开始状态 v-enter-active 进入活动状态 v-enter-to 进入的结束状态 v-leave 离开过渡的开始状态 v-leave-active 离开活动状态 v-leave-to 离开结束状态 过渡模式: in-out 先进后出 out-in 先出后进 用法: 做一个淡隐淡出效果 把想要运动的元素放到<transition></tra

  • 解决vue-router 二级导航默认选中某一选项的问题

    现在有一个需求是这样的: 这个需求很正常吧! 二级导航条,不是二级路由的(如果是二级路由是用linkActiveClass来做,我之前文章说过),是单纯获取数据的按钮,当这个页面出现时,默认选中第一项. 首先: 上面的判断的意思是:如果你点击某一个选项把这个index传过去,activeName等于那一个传过来的index(index是遍历出来的数据如:1,2,3,4,5),就显示该个active或者index==pid,pid默认为0,所以index==0,就是默认第一个选项被选中. 但是当我

  • 移动端底部导航固定配合vue-router实现组件切换功能

    在我们平时练习或者实际项目中也好,我们常常遇到这么一个需求:移动端中的导航并不是在顶部也不是在底部,而是在最底部且是固定的,当我们点击该导航项时会切换到对应的组件. 相信对于很多朋友而言,这是一个很简单的需求,而且市面上有很多开源的组件库就可以实现,像比如说:cube-ui等!那么对于一个要是还在练习以及对第三方组件库不是很了解的朋友不妨看看我这篇,相信会对你有所收获的! 首先,在实现这个需求之前,我们先分析或者回想下和自己做过的demo中哪个类似,相信很多朋友立马就会想起来---tab栏切换,

  • vue-router跳转时打开新页面的两种方法

    最近还是在痛苦的挣扎中 挣扎吧 记录一下在vue项目中如何实现跳转到一个新页面(一个比较简单又比较基础的问题了),有两个方法: 1.<vue-link>标签实现新窗口打开 官方文档中说 v-link 指令被 <router-link> 组件指令替代,且 <router-link> 不支持 target="_blank" 属性,如果需要打开一个新窗口必须要用<a>标签,但事实上vue2版本的 <router-link> 是支持

  • vue学习之Vue-Router用法实例分析

    本文实例讲述了vue学习之Vue-Router用法.分享给大家供大家参考,具体如下: Vue-router就像一个路由器,将组件(components)映射到路由(routes)后,通过点击<router-link>它可以在<router-view>中将相应的组件渲染出来. 1.使用vue-router的步骤 //1.创建路由组件 const Link1={template:'#link1'}; const Link2={template:'#link2'}; const Link

  • vue-router的钩子函数用法实例分析

    本文实例讲述了vue-router的钩子函数用法.分享给大家供大家参考,具体如下: vue路由钩子大致可以分为三类: 1.全局钩子 主要包括beforeEach和aftrEach, beforeEach函数有三个参数: to:router即将进入的路由对象 from:当前导航即将离开的路由 next:Function,进行管道中的一个钩子,如果执行完了,则导航的状态就是 confirmed (确认的):否则为false,终止导航. afterEach函数不用传next()函数 这类钩子主要作用于

  • vue-router结合vuex实现用户权限控制功能

    为了实现前端校验用户,后端需要在用户登录的时候记录下该用户的状态并加密之后返回给前端.之后该用户的所有请求都应该附带这个加密后的状态,后端取到这个状态解密,并与之前保存的状态对比,以此来判断该用户是否登录或合法. 我这里使用了node简单了写了个本地的express服务,来实现上述功能.完整的代码直接贴出来: // server.js const express = require('express'); const bodyParser = require('body-parser'); co

  • vue-router二级导航切换路由及高亮显示的实现方法

    这里以网易云音乐作为示例,效果图: 我们先一层一层写导航 先设计第一层 1.设计导航页面样式 第一个导航页面为Discover Discover.vue: <!-- --> <template> <div> 发现 </div> </template> <script> export default { name: "discover", data() { return { }; } }; </script&g

  • 详解新手使用vue-router传参时注意事项

    1. 使用name和params组合传参 this.$router.push({name: 'details', params: {'id': 233}}) 路由配置 import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) export default new Router({ mode: 'history', routes: [ { path: '/details', name: 'details', comp

  • vue-router 中 meta的用法详解

    如果我想做下面这个功能: 路由 代码: 用这个获取 以上这篇vue-router 中 meta的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 使用vue-router在Vue页面之间传递数据的方法

    前言 几周前,我写了关于 Vue 路由的使用和在 Vue 页面导航的文章.这是在应用程序中探索的一个基本例子. 通常,在将导航构建到应用程序中时,您会发现需要将数据从一个页面传递到另一个页面.(不通顺)例如,您遵循 master-detail 模式,其中您有一个数据列表,通过更深入地挖掘可以获得关于列表中特定项的更多信息. 我们将学习如何使用路由和 URL参数以及查询参数在 Vue 页面之间传递数据. 如果你还没有读过我之前的教程或者不熟悉 vue-router 库,我建议你温习一下. 利用 U

  • 使用vue-router切换页面时实现设置过渡动画

    背景 今天在编写页面时,看到页面没有任何效果就只是直入直出,完全没有一点逼格,所以想要实现类似于原生app的那种切换页面时的特效,遂开始google,发现网上各种方案都是各有优缺点,于是整理了自认为优雅的方案并记录下来. 实现难点 如何判断切换路由时是前进还是后退 每次切换时向左向右切换动画如何实现 解决方案 我们需要给各个页面定义层级,在切换路由时判断用户是进入哪一层页面,如果用户进入更高层级那么做前进动画,如果用户退到低层级那么做后退动画. router/index.js import Vu

  • 浅谈vue-router路由切换 组件重用挖下的坑

    问题描述:vue-router导航切换 时,如果两个路由都渲染同个组件,组件会重(chong)用,组件的生命周期钩子不会再被调用,使得组件的一些数据无法根据 path的改变得到更新 翻车现场再现: 这是我的/router/index.js 的内容节选 export default new Router({ routes: [ { path: '/main', component: Main }, { path: '/get', component: Main } ] }) 这是我的 Main.v

  • vue实现权限控制路由(vue-router 动态添加路由)

    用户登录后返回权限菜单,前端根据权限菜单动态添加路由,然后再动态生成菜单栏. 思路如下: 一.定义初始化默认路由. 二.动态配置路由,这里是把所有组件中相应的路由配置成一个个的对象,根据后台返回的菜单tree一个个去匹配. 三.通过匹配,把匹配好的路由数据addRoutes到路由中. 四.为了防止刷新页面后路由数据被清空,这里用判断是否登录的方式,再次加载动态路由. 具体代码如下: router.js import Vue from 'vue' import {router} from './i

  • 浅析vue-router中params和query的区别

    1.引入方式不同 query要用path来引入 this.$router.push({ path: 'test', query: { type: 2, detail: '哈哈' } }) params要用name来引入 this.$router.push({ name: 'test', query: { type: 2, detail: '哈哈' } }) 2.url不同 query在url中显示参数 http://localhost:8080/detail?type=0&detail=哈哈 p

  • vue-router路由模式详解(小结)

    一.路由模式解析 要讲vue-router的路由模式,首先要了解的一点就是路由是由多个URL组成的,使用不同的URL可以相应的导航到不同的位置. 如果有进行过服务器开发或者对http协议有所了解就会知道,浏览器中对页面的访问是无状态的,所以我们在切换不同的页面时都会重新进行请求.而实际使用vue和vue-router开发就会明白,在切换页面时是没有重新进行请求的,使用起来就好像页面是有状态的,这是什么原因呢. 这其实是借助了浏览器的History API来实现的,这样可以使得页面跳转而不刷新,页

  • vue-router两种模式区别及使用注意事项详解

    本文实例讲述了vue-router两种模式区别及使用注意事项.分享给大家供大家参考,具体如下: Vue Router 是Vue官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.vue-router 默认 hash 模式,还有一种是history模式. hash模式 hash模式的工作原理是hashchange事件,可以在window监听hash的变化.我们在url后面随便添加一个#xx触发这个事件. window.onhashchange = function(

随机推荐