详解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 相关文章推荐
把input初始值不写value的具体实现方法
Jul 04 Javascript
javascript break指定标签打破多层循环示例
Jan 20 Javascript
jQuery遍历对象、数组、集合实例
Nov 08 Javascript
全屏滚动插件fullPage.js使用实例解析
Oct 21 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
Nov 22 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
Jan 25 Javascript
vue v-model动态生成详解
Jun 30 Javascript
vue如何获取自定义元素属性参数值的方法
May 14 Javascript
微信小程序实现弹出菜单动画
Jun 21 Javascript
vuex vue简单使用知识点总结
Aug 29 Javascript
详细分析vue响应式原理
Jun 22 Javascript
如何使用原生Js实现随机点名详解
Jan 06 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(1)
2006/10/09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
php中函数的形参与实参的问题说明
2010/09/01 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2017/04/25 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
javascript 冒号 使用说明
2009/06/06 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
JavaScript使用localStorage存储数据
2019/09/25 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
python实现的登录和操作开心网脚本分享
2014/07/09 Python
windows10系统中安装python3.x+scrapy教程
2016/11/08 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
无毒社区工作方案
2014/05/23 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android