详解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 相关文章推荐
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
Oct 21 Javascript
jquery解析JSON数据示例代码
Mar 17 Javascript
深入探密Javascript数组方法
Jan 08 Javascript
javascript截取字符串小结
Apr 28 Javascript
jQuery使用$.each遍历json数组的简单实现方法
Apr 18 Javascript
jQuery插件ajaxFileUpload使用实例解析
Oct 19 Javascript
浅析上传头像示例及其注意事项
Dec 14 Javascript
canvas红包照片实例分享
Feb 28 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
Mar 01 Javascript
前端页面文件拖拽上传模块js代码示例
May 19 Javascript
记一次webapck4 配置文件无效的解决历程
Sep 19 Javascript
实例介绍JavaScript中多种组合继承
Jan 20 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
PHP 创建标签云函数代码
2010/05/26 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
js parseInt(&quot;08&quot;)未指定进位制问题
2010/06/19 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
React中嵌套组件与被嵌套组件的通信过程
2018/07/11 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
vue项目中使用vue-layer弹框插件的方法
2020/03/11 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
Vue中避免滥用this去读取data中数据
2021/03/02 Vue.js
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
python设置windows桌面壁纸的实现代码
2013/01/28 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
2018/08/03 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
python取均匀不重复的随机数方式
2019/11/27 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android