说明:

我们项目现在用的是:vue2.0 + vue-cli + webpack + vue-router2.0 + vue-resource1.0.3
如果大家在实践的过程中与本文所说的内容有较大区别的话看看是不是版本问题。
本文是一系列文章,在我对Vue有了更深刻的理解认识之后会对文章及时进行修改或更正。欢迎大家批评指出错误。以下是已完成的文章列表。

1. Vue.js系列之项目搭建(1)
2. Vue.js系列之项目结构说明(2)
3. Vue.js系列之vue-router(上)(3)
4. Vue.js系列之vue-router(中)(4)


1.router-link的其他表现形式

有时候我们会这样去写,但是发现多了一个层级,而Vue提供了很好的方案。

<li><router-link to="/mine"><i class="icon-nav icon-nav5"></i><span>我的</span></router-link>
</li>
<router-link to="/mine" tag="li">        //tag指定标签名<i class="icon-nav icon-nav5"></i><span>我的</span>
</router-link>
<!-- 渲染结果 -->
<li><i class="icon-nav icon-nav5"></i><span>我的</span>
</li>

2.当前路由添加激活状态

还是看这张图,大家注意看到地址栏变化的同时,下面的tabBar也是相应的切换了状态的,这是因为vue-router提供了这样的机制,即当前路由激活时,自动添加类名,默认router-link-active 我们也可以通过中篇说到的,在创建vue-router实例的时候给他设置全局配置,修改默认添加类名。


linkActiveClass:'link-active'

我们就直接直接用默认类名吧,那接下来就是写CSS(less)样式了

.router-link-active{.icon-nav5 {background-image: url('../assets/img/icon-nav5a@3x.png');}color: #e5321e;
}

不过这里会遇到一个问题,就是当出现嵌套路由时,会出现激活污染。 举个例子,如果当前的路径是 /a 开头的,那么 <router-link to="/a"> 也会被设置 CSS 类名。
同样的,按照这个规则,<router-link to="/"> 将会被各个路由激活!这时我们需要使用 exact 属性来解决这种情况。

  <!-- 这个链接只会在地址为 / 的时候被激活 --><router-link to="/" exact>

3.路由跳转时添加过渡动效

这个功能也是通过vue-router切换时,自动添加了类名实现的。路由之间的切换添加一点动效效果会很不错的。
这里我们在App组件的路由出口上添加动效就好了,因为所有的组件都渲染在这里,这样我们就可以给所有的路由切换添加动效。

<template><div id="app"><transition name="fade"><router-view></router-view></transition></div>
</template>
.fade-enter-active, .fade-leave-active {transition: opacity .5s
}
.fade-enter, .fade-leave-active {opacity: 0
}

过渡的css类名

v-enter: 定义进入过渡的开始状态。在元素被插入时生效,在下一个帧移除。v-enter-active: 定义进入过渡的结束状态。在元素被插入时生效,在 transition/animation 完成之后移除。v-leave: 定义离开过渡的开始状态。在离开过渡被触发时生效,在下一个帧移除。v-leave-active: 定义离开过渡的结束状态。在离开过渡被触发时生效,在 transition/animation 完成之后移除。

要想添加更多的动画效果,大家可以看文档和自由发挥了,也可以添加其他动画库。

4.命名路由及路由传参

命名路由

在路由实例创建的时候,我们会给每个路由地址添加一个name属性,这样在路由嵌套的时候,就不用写很长的路由地址,只需要写个name就好了。

routes: [{path: '/login/loginWx',name: 'loginWx',component: function(reslove){return require(['./components/login/loginWx'],reslove)}}
]
<!-- 命名的路由 -->
<router-link :to="{ name: 'loginWx', params: { userId: 123 }}">User</router-link>

路由传参

可以看到动图中我修改的性别和学历其实是一个组件,但是有不同的展现,主要就是靠路由传参实现的,每个路由跳转的时候,带不同的参数,然后在组件中判断是那个路由传过来的再进行相应的操作。

<li><router-link :to="{name:'dataInput',params:{value:mine.trueName,proName:'trueName',title:'修改名字'}}"><span>名字</span><div class="enter-btn"><img src="../assets/img/enter-btng@3x.png"></div><span class="hint">{{mine.trueName}}</span></router-link>
</li>

拿到了路由传过来的参数后我们可以进行业务上的逻辑处理。(注意,拿参数的时候是this.$route,是route,不是router,不要被坑了)

5.编程式导航

还是看上面这张修改性别的动图,我们可以看到修改之后直接又回到了原来的路由,这里主要是用了编程式导航,实现返回。
我在修改成功返回code为1000时,就让路由直接后退回去,如果失败就不返回,除非用户自己手动返回。

编程式导航有几种方式,下面来介绍一下,针对的应用场景不一样。

router.push(location)

想要导航到不同的 URL,则使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。
当你点击 <router-link> 时,这个方法会在内部调用,所以说,点击 <router-link :to="..."> 等同于调用 router.push(…)。这样我们想要路由跳转到指定页面是,就可以在JS中用这个方法,这个方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如:

router.push({ name: 'user', params: { userId: 123 }})

声明式:<router-link :to="...">
编程式:router.push(...)

router.replace(location)

跟 router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。
声明式:<router-link :to="..." replace>
编程式:router.replace(...)

router.go(n)

这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)。正数表示前进,负数表示后退。所以我这里让路由返回用了this.$router.go(-1)
为什么不用push或者replace呢?
是因为当我修改完了之后,路由自动跳转回去,但是这时用户再手动返回一次,就会出现很不好的体验,push是会返回上个信息修改页面,replace是会返回到修改信息的上一层级页面,因为当前层级已经被代替掉了。

6.总结

下篇主要把vue-router剩下的几个问题解决了。这几个问题都是在项目中经过实践选择出来的使用场景,当然还有很多不完善的地方,接下来项目会持续修改,不过遗憾的是因为目前我们的系统是需要购买的,所以大家不能亲自去体验一下了,我会尽量用动图来更好的展现效果。

题外话

这篇文章写了两遍,快要完成的时候,我因为同时开了两个markdown编辑窗口,而且忘了修改标题导致和中篇直接冲突了,就是没了,找了好久都没有找回来,只能含着泪重新开始撸。当时体会到了什么叫心血,是心在滴血啊。
然后这几篇都是用markdown编写的,也特意去看了一下语法,简单用了一些。之前说的自动换行实在火狐浏览器里面,而且我是win10,不知道跟这些有没有关系,反正我现在是在chrome中使用,没出现什么问题了,除了重写了一次(再次痛哭。。。)。

Vue.js系列之vue-router(下)(5)相关推荐

  1. vusjs 配合php_对照着jquery来学vue.js系列之配合thinkphp下拉获取分页数据

    上篇文章介绍了vue.js如何ajax获取数据: 接着不可避免就遇到的是: 如何进行数据分页呢? 这里以thinkphp为示例讲解:其他场景性质一样: 示例项目:https://github.com/ ...

  2. Vue.JS项目中二级路由下刷新浏览器仍呈现当前路由的实现方案

    1.需求介绍: 以下介绍一下实现起来没什么疑问的需求:设备列表为一个主页,点击设备列表中的编辑按钮,进入设备信息主页面,默认打开设备配置页,点击设备状态.设备日志.固件升级,会切换下方内容. 本人对以 ...

  3. # vue.js 之 对vue.js基础理解

    vue.js 之 对vue.js基础理解 Vue构造器 1 . Vue.js是一个构造函数,编程中称之为构造器 2 . 每一个new Vue() 都是一个Vue构造函数的实例,这个过程叫做实例化 3 ...

  4. Vue.js系列之入门手册整理

    文章目录 第一章.环境搭建 1.1.准备: 1.2.nodejs安装 1.3.npm安装 1.4.vue安装 第二章.目录结构 2.1.webpack 2.2.webpack下的全局文件结构 第三章. ...

  5. Vue.js 系列教程 3:Vue-cli,生命周期钩子

    原文:intro-to-vue-3-vue-cli-lifecycle-hooks 译者:nzbin 这是 JavaScript 框架 Vue.js 五篇教程的第三部分.在这一部分,我们将学习 Vue ...

  6. Vue.js 系列教程 4:Vuex

    原文:intro-to-vue-4-vuex 译者:nzbin 这是关于 JavaScript 框架 Vue.js 五个教程的第四部分.在这一部分,我们会学习使用 Vuex 进行状态管理.这个系列教程 ...

  7. [Vue.js] 基础 -- 安装Vue

    安装 Vue 版本说明 Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性.但它支持所有兼容 ECMAScript 5 的浏览器 直接用 &l ...

  8. 【Vue.JS】纯 Vue.js 制作甘特图

    效果图 在线预览 GitHub链接(包含 knockoutJS 版本与 Vue 版本) 推荐组合效果 推荐与双表头固定效果组合,实现如上例中横表头(日期)纵向固定,纵表头(类型)横向固定效果. 参照连 ...

  9. springboot+vue.js+mysql+基于VUE框架的商城综合项目自动化系统的实现 毕业设计-附源码051018

    商城综合项目自动化系统 摘 要 目前电商系统商城项目管理极其频繁,迫切地需要自动化测试来代替人工繁琐而又重复的劳动.自动化测试相关的研究已经很多,但多数只是针对某一方面,比如单一接口或者单一页面或者性 ...

最新文章

  1. 来自Riot 的一份游戏美术教程(一):核心原则
  2. python deque索引超出范围_Python基础语法
  3. lammps软件_Lammps模型构建的方法之一:组合模型构建
  4. datax参数设置_DataX Web数据增量同步配置说明
  5. HDU 6625 three arrays 求两个序列异或最小值的排列(一个可以推广的正解
  6. 【Python】Python实战从入门到精通之一 -- 教你深入理解Python中的变量和数据类型
  7. ATK - Accessibility Toolkit - 辅助功能工具包
  8. python 文本框内容变化_当文本框中的文本发生变化时,动态读取文本输入中的文本?...
  9. 计算机网络考研常见 复试题总结
  10. vs2008 web创作组件安装失败
  11. linux poodle漏洞,SSL POODLE[贵宾犬]漏洞的解决办法
  12. 12 道腾讯前端面试真题及答案整理
  13. 网络对抗 Exp7 网络欺诈防范 20154311 王卓然
  14. 2020浙江大学软件学院预推免经验
  15. b区计算机211学校排名,b区211大学名单排名
  16. 程序猿如何保护眼睛方法.
  17. 上传excel文件到服务器,excel怎么上传到云服务器
  18. Android 时间更新机制之网络更新时间
  19. 巴黎欧莱雅沙龙专属全球首家旗舰沙龙于上海开业
  20. 使用Sudo apt-get update更新是出现:错误:9 http://cz.archive.ubuntu.com/ubuntu lucid Release

热门文章

  1. Notability没办法连接到icloud时怎么做?
  2. 红米5a手机html查看器,【报Bug】uni.rquest 红米5a访问线上h5页面请求接口报错,控制台不显示接口...
  3. ffmpeg教程和流媒体参考地址
  4. VMware Workstation——虚拟机更换磁盘文件路径的方法总结
  5. java 定时任务哪个好_Java定时任务
  6. 2.6 矩阵的初等变换
  7. RxJava中Observable的基本用法
  8. 主题:分支操作(Eclipse)
  9. 聚焦WAVE SUMMIT 2021,大咖齐聚共研深度学习
  10. rhythmbox中文乱码的解决方法