详解vue-router 2.0 常用基础知识点之router-link


Posted in Javascript onMay 10, 2017

前端采用前后端分离的方式进行开发,我们使用vue2.0框架,做单页面应用难免会用到vue-router,今天把项目中的用到router-link摘出来,一是想整理一下这些用法,方便下次快速查找,二是重新再过一下vue-router,增加熟悉度。也希望下面这些例子能帮到其他使用vue-router的朋友。

1,$route.params

类型: Object

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

path: '/detail/:id' 动态路径参数 以冒号开头

const routes = [
 {path: '/detail/:id', component: Detail, name: 'detail', meta: {title: ''}},
 {path: '/activity', component: Activity, name: 'activity', meta: {isNeedAuth: false, title: '活动现场'}},
];

还可以在一个路由中设置多段『路径参数』,对应的值都会设置到 $route.params 中

1个参数

模式: /user/:username

匹配路径: /user/evan

$route.params:{ username: 'evan' }

多个参数

模式: /user/:username/post/:post_id

匹配路径:/user/evan/post/123

$route.params:{ username: 'evan', post_id: 123 }

复用组件时,想对路由参数的变化作出响应的话,你可以简单地 watch(监测变化) $route 对象:

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

或者像下面这样,只要$route发生变化,就可以做某事:

export default {
 data () {
 return {}
 },
 watch: {
 // 如果路由有变化,会再次执行该方法
 '$route': 'doSomeThing'
 },
 methods: {
 doSomeThing(){}
 }
}

综合案例

// 当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用。
// 可以通过this.$route.params.id来取上动态的id
<router-link :to="{path: '/detail/' + this.$route.params.id}" >
此团详情
</router-link>

// 还可以用命名路由的方式:
<router-link :to="{ name: 'detail', params:{ id: this.$route.params.id }}" >
此团详情
</router-link>

// 还可以用router.push()的方式
router.push({name:'detail', params: { id: this.$route.params.id}})

// 以上三种方式都可以实现跳转,都可以通过this.$route.params来取到参数

2,$route.query

类型: Object

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

// 动态数据的查询参数
 export default {
  data() {
   return {
    queryData: {}
   }
  },
  created() {
   this.$http.get(url)
    .then(function (response) {
     // ...
     if (data.code == 0) {
      this.queryData.order_id = data.content.order_id;
      this.queryData.business_id = data.content.business_id;
      this.queryData.coupon_id = data.content.coupons.coupon_id;
     }
     // ...
    }, function (response) {
     // ...
    })
  },
 }

// 使用
<router-link :to="{ path: '/backend/verify_coupon', query:this.queryData }">验证抵扣券</router-link>

3,定义路由的时候可以配置 meta 字段

// 举个例子
const routes = [
 {path: '/activity', component: Activity, name: 'activity', meta: {isNeedAuth: false, title: '活动现场'}},
];

实际工作中使用的时候就可以像下面这样:

import { setTitleHack } from './utils';
import Activity from './views/activity.vue'
import Start from './views/start.vue'
// 定义路由的时候在meta中加入自定义字段
const routes = [
 {path: '/activity', component: Activity, name: 'activity', meta: {isNeedAuth: false, title: '活动现场'}},
 {path: '/start', component: Start, name: 'start', meta: {isNeedAuth: false, title: '活动现场'}},
];
const router = new VueRouter({...});
router.beforeEach((to, from, next) => {
 // 动态修改页面的title
 setTitleHack(to.meta.title);
  // 根据自定义的路由元信息来做判断:
 if (to.meta.isNeedAuth !== false) {
  // do something
 } else {
  // do something
 }
 next();
});

4,append

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

<router-link :to="{path:'/coupon/detail/'+item.order_id, append:'true'}"></router-link>

如果上面这个路由是从home页面跳转过来,得到的结果就是/home/coupon/detail/id

5,active-class

类型: string

默认值: "router-link-active"

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

<router-link tag="li" :to="{path:'/home', activeClass: 'bottom-nav-active'}"></router-link>

7,综合案例

// 命名路由,append 属性,查询参数,router-link渲染成<li>标签
<router-link tag="li" :to="{name:'demandindex', append:true, query: {isFormBackend: 1}, activeClass: 'bottom-nav-active'}">
</router-link>

// to的值:字符串形式
<router-link to="banner.image_url" ></router-link>

// to的值:对象形式,拼接多个动态参数
<router-link :to="{path: '/my/modify?modify=fullname&val=' + profile.nickname}" ></router-link>

// to的值:对象形式
<router-link :to="{path: '/home'}">返回首页</router-link>

// to的值:对象形式,拼接动态参数
<router-link to="{path: '/backend/coupon_order_detail/' + product.order_id+'?order_status='+product.order_status}"></router-link>

// to的值:对象形式,带一个路径参数
<router-link :to="{path: '/detail/' + this.$route.params.id}" ></router-link>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript调试之DOM断点调试法使用技巧分享
Apr 15 Javascript
浅谈javascript 归并方法
Jan 21 Javascript
javascript如何写热点图
Dec 08 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
Dec 30 Javascript
AngularJS ng-controller 指令简单实例
Aug 01 Javascript
yarn与npm的命令行小结
Oct 20 Javascript
JS使用tofixed与round处理数据四舍五入的区别
Oct 25 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
Nov 15 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
Sep 05 Javascript
koa源码中promise的解读
Nov 13 Javascript
详解JavaScript作用域和作用域链
Mar 19 Javascript
Node.js实现断点续传
Jun 23 Javascript
JavaScript使用readAsDataURL读取图像文件
May 10 #Javascript
angular.js指令中的controller、compile与link函数的不同之处
May 10 #Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
May 10 #Javascript
详解vue-router 2.0 常用基础知识点之router.push()
May 10 #Javascript
JavaScript通过filereader接口读取文件
May 10 #Javascript
关于vue-router路径计算问题
May 10 #Javascript
JavaScript使用readAsDataUrl方法预览图片
May 10 #Javascript
You might like
COM in PHP (winows only)
2006/10/09 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
再论Javascript的类继承
2011/03/05 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
Django 拆分model和view的实现方法
2019/08/16 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
python安装sklearn模块的方法详解
2020/11/28 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
顶撞领导检讨书
2014/01/29 职场文书
库房管理员岗位职责
2014/03/09 职场文书
服务承诺书格式
2014/05/21 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python