详解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 相关文章推荐
跨浏览器的事件对象介绍
Jun 27 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
Nov 13 Javascript
jquery链式操作的正确使用方法
Jan 06 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
May 21 Javascript
Swiper实现轮播图效果
Jul 03 Javascript
bootstrap多层模态框滚动条消失的问题
Jul 21 Javascript
jQuery 防止相同的事件快速重复触发方法
Feb 08 jQuery
原生JS实现的碰撞检测功能示例
May 18 Javascript
centos 上快速搭建ghost博客方法分享
May 23 Javascript
JavaScript实现异步图像上传功能
Jul 12 Javascript
layUI实现三级导航菜单效果
Jul 26 Javascript
解决vue-cli 打包后自定义动画未执行的问题
Nov 12 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
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
PHP的PDO连接讲解
2019/01/24 PHP
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
javascript制作2048游戏
2015/03/30 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
总结Python编程中函数的使用要点
2016/03/20 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
基于Django统计博客文章阅读量
2019/10/29 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
财务会计专业推荐信
2013/11/30 职场文书
项目投资建议书
2014/05/16 职场文书
公司口号大全
2014/06/11 职场文书
共青团员自我评价
2015/03/10 职场文书
端午节寄语2015
2015/03/23 职场文书
2016大学生国家助学贷款承诺书
2016/03/25 职场文书
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android