详解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 相关文章推荐
基于json的jquery地区联动效果代码
Jul 06 Javascript
js 实现css风格选择器(压缩后2KB)
Jan 12 Javascript
jQuery下的动画处理总结
Oct 10 Javascript
js格式化时间和js格式化时间戳示例
Feb 10 Javascript
js拼接html注意问题示例探讨
Jul 14 Javascript
学习javascript文件加载优化
Feb 19 Javascript
实例详解ECMAScript5中新增的Array方法
Apr 05 Javascript
javascript html5摇一摇功能的实现
Apr 19 Javascript
React 组件中的 bind(this)示例代码
Sep 16 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
Aug 26 Javascript
JS实现纸牌发牌动画
Jan 19 Javascript
Nest.js散列与加密实例详解
Feb 24 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 __autoload()方法真的影响性能吗?
2012/03/30 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
php获取远程文件内容的函数
2015/11/02 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
javascript FormatNumber函数实现方法
2008/12/30 Javascript
jquery 简单的进度条实现代码
2010/03/11 Javascript
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
深入理解javascript中的this
2021/02/08 Javascript
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
Python列表操作方法详解
2020/02/09 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
网站设计师的岗位职责
2013/11/21 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
部队2014年终工作总结
2014/11/27 职场文书
警告通知
2015/04/25 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang
MySQL通过binlog恢复数据
2021/05/27 MySQL
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js