3.8.动态路由匹配和路由组件传参

3.8.1.动态路由匹配

动态路由意味着不固定,具有某种模式,我们希望通过某种匹配方式,把这种不固定的路由形势映射到同一个组件,例如:一个User组件,不同的ID表示不同的用户,即/user/1、/user/2、/user/3,这些不同用户所对应的路由,我们都希望用一个User组件来渲染。vue-router中提供了动态路径参数来实现这种需求,动态路径参数写法:

routes: [
// 动态路径参数 以冒号开头
{ path: '/user/:id', component: User }
]

这里的id类似于一个变量,id可以是1、2、3等具体的值

<template>
<div class="page">
<router-link :to="'/user/'+item.id" v-for="(item, index) in userList" :key="index">{{item.username}}</router-link>
</div>
</template> <script type="text/javascript">
let userData = [
{
id: '1',
username: 'nodeing1',
level: 'vip1'
},
{
id: '2',
username: 'nodeing2',
level: 'vip1'
},
{
id: '3',
username: 'nodeing3',
level: 'vip2'
},
{
id: '4',
username: 'nodeing4',
level: 'vip3'
}]
export default {
data () {
return {
userList: userData
}
},
components: { }
}
</script> <style scoped>
a{
display: inline-block;
padding: 20px 60px;
text-decoration: none;
}
</style>

路由配置:

routes: [
{
path: '/user/:id?',
component: User
}
]

如何监听/响应动态参数的变化?

方式1: 使用 beforeRouteUpdate 钩子函数

<template>
<div class="page">
<router-link :to="'/user/'+item.id" v-for="(item, index) in userList" :key="index">{{item.username}}</router-link>
<hr>
<h3>用户名: {{userInfo.username}}</h3>
<h3>会员级别: {{userInfo.level}}</h3>
<h3>id: {{userInfo.id}}</h3>
</div>
</template> <script type="text/javascript">
let userData = [
{
id: '1',
username: 'nodeing1',
level: 'vip1'
},
{
id: '2',
username: 'nodeing2',
level: 'vip1'
},
{
id: '3',
username: 'nodeing3',
level: 'vip2'
},
{
id: '4',
username: 'nodeing4',
level: 'vip3'
}]
export default {
data () {
return {
userList: userData,
userInfo: {}
}
},
components: { },
beforeRouteUpdate (to, from, next) {
this.userInfo = this.userList.filter((item) => to.params.id === item.id)[0]
}
}
</script> <style scoped>
a{
display: inline-block;
padding: 20px 60px;
text-decoration: none;
}
</style>

方式2: 在组件中对 $route 进行 watch(监听)

watch: {
$route () {
console.log(this.$route)
}
}

路由信息对象$route

path   对应当前路由的路径
params 保护动态路由参数
query url查询参数
hash 当前路由的hash值
fullPath 完整的url路径,包含查询参数和hash
matched 包含当前路由的所有嵌套路径片段的路由记录
name 当前路由的名称

3.8.2.路由组件传参

在组件中使用 $route 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性,我们需要做的是通过传参将组件与路由解耦,使得组件的使用更加灵活,这里需要使用到props

路由配置里面我们需要改成这样

routes: [
{
path: '/user/:id?',
component: User,
props: true
}
]

在组件中使用props的值

<template>
<div class="page">
<router-link :to="'/user/'+item.id" v-for="(item, index) in userList" :key="index">{{item.username}}</router-link>
<hr>
<button @click="fn">显示信息</button>
<h3>用户名: {{userInfo.username}}</h3>
<h3>会员级别: {{userInfo.level}}</h3>
<h3>id: {{userInfo.id}}</h3>
</div>
</template> <script type="text/javascript">
let userData = [
{
id: '1',
username: 'nodeing1',
level: 'vip1'
},
{
id: '2',
username: 'nodeing2',
level: 'vip1'
},
{
id: '3',
username: 'nodeing3',
level: 'vip2'
},
{
id: '4',
username: 'nodeing4',
level: 'vip3'
}]
export default {
data () {
return {
userList: userData,
userInfo: {}
}
},
components: { },
props: ['id'],
methods: {
fn () {
let id = this.id
this.userInfo = this.userList.filter((item) => id === item.id)[0]
console.log(this.userInfo)
}
}
}
</script> <style scoped>
a{
display: inline-block;
padding: 20px 60px;
text-decoration: none;
}
</style>

螺钉课堂视频课程地址:http://edu.nodeing.com

vue全家桶(2.5)的更多相关文章

  1. 用 Vue 全家桶二次开发 V2EX 社区

    一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...

  2. Vue全家桶

    简介 “简单却不失优雅,小巧而不乏大匠”. Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计. 为什么 ...

  3. 从零开始系列之vue全家桶(3)安装使用vuex

    什么是vuex? vuex:Vue提供的状态管理工具,用于同一管理我们项目中各种数据的交互和重用,存储我们需要用到数据对象. 即data中属性同时有一个或几个组件同时使用,就是data中共用的属性. ...

  4. 使用vue全家桶制作博客网站

    前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue.vue-router.vuex.v ...

  5. 转载: 使用vue全家桶制作博客网站 HTML5 移动网站制作的好教程

    使用vue全家桶制作博客网站   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue. ...

  6. Vue全家桶介绍

    一直不清楚全家桶是什么玩意,上网搜了一下,才知道就是平时项目中使用的几个依赖包,下面分享一下 Vue 全家桶介绍 Vue有著名的全家桶系列,包含了vue-router(http://router.vu ...

  7. 一个简单的假vue全家桶(vue+vue-router+require)

    首先说明我觉得这是一个比较好理解的vue全家桶(虽然是假的),模块化也是用require来做的,而且如果后期有必要压缩我也会用gulp来做 1.依赖个个本地模块,require只是用来载入page,这 ...

  8. Vue 全家桶 + Electron 开发的一个跨三端的应用

    代码地址如下:http://www.demodashi.com/demo/11738.html GitHub Repo:vue-objccn Follow: halfrost · GitHub 利用 ...

  9. Vue全家桶了解一下(待补充)

    vue全家桶了解一下 一.vue+vue-router+vuex+axios1.vue:使用vue-cli,生成最基本的vue项目2.vue-router:vue项目中的路由管理插件3.vuex:vu ...

  10. 升级vue全家桶过程记录

    背景 如果你使用了element-ui的el-tabs组件,并且想要单独升级element-ui至2.10.0,你会发现,使用了el-tabs组件的页面只要打开就卡死.原因是element-ui~2. ...

随机推荐

  1. Java实现蓝桥杯VIP算法训练 预测身高

    试题 算法训练 预测身高 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述: 生理卫生老师在课堂上娓娓道来: 你能看见你未来的样子吗?显然不能.但你能预测自己成年后的身高,有公式: 男 ...

  2. Java实现 LeetCode 242 有效的字母异位词

    242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = " ...

  3. Java实现 LeetCode 35 搜索插入位置

    35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1, ...

  4. Java实现 LeetCode 6 Z字形变换

    6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...

  5. excel表 更改后缀名 xlsx转成csv csv转换xlsx

    excel 转成CSV 步骤: 1.打开你需要转换的Excel表格.这里特别介绍一下多个数字的现象,我们知道,像身份证这些多位数字,在正常表格里都是会加上一个'来使其显示的,或者换成"文本& ...

  6. Java实现填写乘法算式

    观察下面的算式: * * × * * = * * * 它表示:两个两位数字相乘,结果是3位数.其中的星号(*)代表任意的数字,可以相同,也可以不同,只要不是在首位的就可以是0.当然,满足这个要求的算式 ...

  7. java实现括号的匹配

    括号的匹配 下面的代码用于判断一个串中的括号是否匹配 所谓匹配是指不同类型的括号必须左右呼应,可以相互包含,但不能交叉 例如: -(-[-]-)- 是允许的 -(-[-)-]- 是禁止的 对于 mai ...

  8. PAT D进制的A+B

    输入两个非负 10 进制整数 A 和 B ( <=230-1 ) ,输出 A+B 的 D (1<D<=10) 进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B 和 D. ...

  9. QPS、TPS、并发用户数、吞吐量关系

    1.QPS QPS Queries Per Second  是每秒查询率 ,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准, 即每秒的响应请求数,也即 ...

  10. CSS中的float和margin的混合使用

    在最近的学习中,在GitHub上找了一些布局练习,我发现了我自己对布局超级不熟悉(很难受). 在以前的学习中,感觉使用CSS就记住各个属性的功能就OK了,但是呢?真的很打脸.不说了,太伤心了,进入正题 ...