详谈vue中router-link和传统a链接的区别


Posted in Javascript onJuly 22, 2020

Vue-router是伴随着Vue框架出现的路由系统,它也是公认的一种优秀的路由解决方案。在使用Vue-router时候,我们常常会使用其自带的路径跳转组件Link,通过实现跳转,这和传统的何其相似!但它们到底有什么具体的区别呢?

官方中给出的解释是这样的:

<router-link> 比起写死的 <a href="..." rel="external nofollow" rel="external nofollow" > 会好一些,理由如下:

无论是 HTML5 history 模式还是 hash 模式,它的表现行为一致,所以,当你要切换路由模式,或者在 IE9 降级使用 hash 模式,无须作任何变动。

在 HTML5 history 模式下,router-link 会守卫点击事件,让浏览器不再重新加载页面。

当你在 HTML5 history 模式下使用 base 选项之后,所有的 to 属性都不需要写 (基路径) 了。

呃呃,只能说博主刚学时第一次并没有看懂(应该是之前的基础知识不牢固吧,看来之后得补补啦),于是去自行查阅啦:

<a href="..." rel="external nofollow" rel="external nofollow" >

W3C中是这样解释a标签的:

<a> 标签定义超链接,用于从一张页面链接到另一张页面。

从一张页面跳转到另一张页面,但从这里来说就违背了多视图的单页Web应用这个概念

通过a标签进行跳转,页面会被重新渲染,即相当于重新打开一个新的网页,体现为视觉上的“闪烁”(如果是本地的项目基本看不出来)

router-link

<router-link> 组件支持用户在具有路由功能的应用中 (点击) 导航。 通过 to 属性指定目标地址,默认渲染成带有正确链接的 <a> 标签,可以通过配置 tag 属性生成别的标签.。

通过router-link进行跳转不会跳转到新的页面,也不会重新渲染,它会选择路由所指的组件进行渲染,避免了重复渲染的“无用功”。

总结:对比<a>,router-link组件避免了不必要的重渲染,它只更新变化的部分从而减少DOM性能消耗

Vue的创新之处在于,它利用虚拟DOM的概念和diff算法实现了对页面的"按需更新",

Vue-router很好地继承了这一点,重渲染是我们不希望看到的,因为无论跳转到哪个页面,只需要渲染一次就够了。<Link>组件帮助我们实现了这个愿望

反观<a>标签,每次跳转都得重渲染一次,在一个浩大的项目里,这多么可怕!我们的"渲染"做了许多"无用功",而且消耗了大量弥足珍贵的DOM性能!

补充知识:使用vue中路由router-link中包含a标签

当vue中使用router-link包含a标签的时候,a标签会取代routerlink的值实现跳转,

<div class="list" v-for="(item,index) in listName" @click="toDetail(item.id)">
<p>{{item.name}}</p>
<p>{{item.address}}</p>
<p>{{item.distance}}米</p>
<a :href="getUrl(item.tel)" rel="external nofollow" rel="external nofollow" >图标{{item.tel}}</a>
</div>
<!--<router-link :to="{path:'detail',query:{id:item.id}}" tag="div" class="list" v-for="(item,index) in listName" @click="toDetail()">
<p>{{item.name}}</p>
<p>{{item.address}}</p>
<p>{{item.distance}}米</p>
<a :href="getUrl(item.tel)" rel="external nofollow" rel="external nofollow" >图标{{item.tel}}</a>
</router-link>-->

下面这个routerlink中a标签会替代router-link的使用

可以使用div加点击事件

2 当在vue中实现 a href="tel:1325425652" rel="external nofollow" 的时候,直接使用:href="tel" rel="external nofollow" +变量的方法不可以,

可以使用函数封装

getUrl(tel){
return "tel:"+tel;

},

以上这篇详谈vue中router-link和传统a链接的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js导出table到excel同时兼容FF和IE示例
Sep 03 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
Aug 19 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
Oct 29 Javascript
微信小程序 animation API详解及实例代码
Oct 08 Javascript
bootstrap table表格使用方法详解
Apr 26 Javascript
微信小程序 获取session_key和openid的实例
Aug 17 Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 Javascript
Vue-Router实现组件间跳转的三种方法
Nov 07 Javascript
深入理解node.js http模块
Jan 24 Javascript
Vue修改mint-ui默认样式的方法
Feb 03 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
Apr 24 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
Apr 27 Javascript
解决Vue router-link绑定事件不生效的问题
Jul 22 #Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
Jul 22 #Javascript
vue页面跳转实现页面缓存操作
Jul 22 #Javascript
ES2020系列之空值合并运算符 '??'
Jul 22 #Javascript
解决vue单页面 回退页面 keeplive 缓存问题
Jul 22 #Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
Jul 22 #Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
Jul 22 #Javascript
You might like
PHP脚本的10个技巧(8)
2006/10/09 PHP
优化PHP代码的53条建议
2008/03/27 PHP
php中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
php操作mongodb封装类与用法实例
2018/09/01 PHP
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
javascript中的隐式调用
2018/02/10 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
Python创建文件和追加文件内容实例
2014/10/21 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
python numpy数组复制使用实例解析
2020/01/10 Python
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
银行实习自我鉴定
2013/10/12 职场文书
任命书范本大全
2014/06/06 职场文书
学雷锋的心得体会
2014/09/04 职场文书
避暑山庄导游词
2015/02/04 职场文书
2019同学聚会主持词
2019/05/06 职场文书