详解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 相关文章推荐
js中parseFloat(参数1,参数2)定义和用法及注意事项
Jan 27 Javascript
Javascript中的五种数据类型详解
Dec 26 Javascript
原生js和jQuery写的网页选项卡特效对比
Apr 27 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
Jul 05 Javascript
AngularJS bootstrap启动详解及实例代码
Sep 14 Javascript
Angular的自定义指令以及实例
Dec 26 Javascript
浅谈Vue数据绑定的原理
Jan 08 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
vue-cli 3.x 修改dist路径的方法
Sep 19 Javascript
使用webpack编译es6代码的方法步骤
Apr 28 Javascript
Node.js学习之内置模块fs用法示例
Jan 22 Javascript
JS常见内存泄漏及解决方案解析
May 30 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系统流量分析的程序
2006/10/09 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
JavaScript中的类继承
2010/11/25 Javascript
jQuery代码优化 遍历篇
2011/11/01 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
2016/12/16 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
python面向对象法实现图书管理系统
2019/04/19 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
二年级小学生评语
2014/04/21 职场文书
地方白酒代理协议书
2014/10/25 职场文书
个人借款协议书范本
2014/11/17 职场文书
医院营销工作计划
2015/01/16 职场文书
努力学习保证书
2015/02/26 职场文书
致运动员加油稿
2015/07/21 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL