12 vue-router补充
传递参数
类型
传递参数主要有两种类型: params和query
-
params 的类型 :
- 配置路由格式: /router/:id
- 传递的方式: 在path后面跟上对应的值
- 传递后形成的路径: /router/123, /router/abc
-
query 的类型 :
- 配置路由格式: /router, 也就是普通配置
- 传递的方式: 对象中使用query的key作为传递方式
- 传递后形成的路径: /router?id=123, /router?id=abc(类似于get请求)
方法
通过router-link传递
params
<template>
<div id="app">
<router-link
:to="{
path:'/params'+'/123',
}">传递参数</router-link>
</div>
</template>
url:http://localhost:8080/#/params/123
query
<template>
<div id="app">
<router-link
:to="{
path:'/params',
query: {
name:'biang',
age:18
}//以对象的形式作为参数
}">传递参数</router-link>
</div>
</template>
url:http://localhost:8080/#/params?name=biang&age=18
通过JavaScript代码传递
params
<script>
export default {
name: 'App',
methods:{
toParams(){
this.$router.push({
path:'/params'+'/123'
//router文件中需要将path设置为'/params/:id'
})
}
},
components: {
}
}
</script>
url:http://localhost:8080/#/params/123
query
<script>
export default {
name: 'App',
methods:{
toParams(){
this.$router.push({
path:'/params',
query: {
name:'biang',
age:18
}//以对象的形式作为参数
})
}
},
components: {
}
}
</script>
url:http://localhost:8080/#/params?name=biang&age=18
接收参数
用于获取参数的两个方法都是对象
$route.params
获取通过params方法传入的参数,通过参数名获取对应的值
$route.query
获取通过query方法传入的参数,通过参数名获取对应的值
r o u t e 和 route和 route和router的区别
- r o u t e r 为 V u e R o u t e r 实 例 , 想 要 导 航 到 不 同 U R L , 则 使 用 router为VueRouter实例,想要导航到不同URL,则使用 router为VueRouter实例,想要导航到不同URL,则使用router.push方法
- $route为当前router跳转对象里面可以获取name、path、query、params等
导航守卫
- vue-router提供的导航守卫主要用来监听监听路由的进入和离开的.
- vue-router提供了beforeEach和afterEach的钩子函数, 它们会在路由即将改变前和改变后触发.
用处
-
我们可以利用beforeEach来完成标题的修改.
-
首先, 我们可以在钩子当中定义一些标题, 可以利用meta来定义
-
其次, 利用导航守卫,修改我们的标题.
import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter) import paramsTool from '../components/paramsTool' //定义路由 const routes=[ { path:'/params/:id', component:paramsTool, meta:{ title:'params传递参数' } }, { path:'/params', component:paramsTool, meta:{ title:'非params传递参数' } } ] //创建router实例 const router = new VueRouter({ routes }) router.beforeEach((to,from,next) => { window.document.title = to.meta.title next() }) //导出router实例 export default router
-
参数
导航钩子的三个参数解析:
- to: 即将要进入的目标的路由对象.
- from: 当前导航即将要离开的路由对象.
- next: 调用该方法后, 才能进入下一个钩子
补充
- 补充一:如果是后置钩子, 也就是afterEach, 不需要主动调用next()函数.
- 补充二: 上面我们使用的导航守卫, 被称之为全局守卫.
- 路由独享的守卫
- 组件内的守卫
keep-alive
- keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
它们有两个非常重要的属性:
include - 字符串或正则表达,只有匹配的组件会被缓存
exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存
-
router-view 也是一个组件,如果直接被包在 keep-alive 里面,所有路径匹配到的视图组件都会被缓存:
<keep-alive> <router-view></router-view> </keep-alive>
-
通过create声明周期函数来验证