详谈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 相关文章推荐
jquery 使用点滴函数代码
May 20 Javascript
jquery中ajax学习笔记4
Oct 16 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
Sep 06 Javascript
JQuery中serialize()用法实例分析
Feb 06 Javascript
javascript模拟评分控件实现方法
May 13 Javascript
简述Jquery与DOM对象
Jul 10 Javascript
BootStrap glyphicons 字体图标实现方法
May 01 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
Jan 01 Javascript
JavaScript中值类型和引用类型的区别
Feb 23 Javascript
layui 监听select选择 获取当前select的ID名称方法
Sep 24 Javascript
vue 动态表单开发方法案例详解
Dec 02 Javascript
微信小程序实现倒计时功能
Nov 19 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
PHP闭包函数详解
2016/02/13 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
python进程管理工具supervisor使用实例
2014/09/17 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
python+opencv实现摄像头调用的方法
2019/06/22 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
django url到views参数传递的实例
2019/07/19 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
世嘉游戏英国官方商店:SEGA Shop UK
2019/09/20 全球购物
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
民用住房租房协议书
2014/10/29 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS
python缺失值填充方法示例代码
2022/12/24 Python