详谈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 相关文章推荐
十个优秀的Ajax/Javascript实例网站收集
Mar 31 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
Feb 27 Javascript
JavaScript中对象属性的添加和删除示例
May 12 Javascript
JavaScript运动减速效果实例分析
Aug 04 Javascript
理解js对象继承的N种模式
Jan 25 Javascript
Node.js中.pfx后缀文件的处理方法
Mar 10 Javascript
koa源码中promise的解读
Nov 13 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
Mar 07 Javascript
uni-app之APP和小程序微信授权方法
May 09 Javascript
JS实现的对象去重功能示例
Jun 04 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
Jul 13 Javascript
element ui分页多选,翻页记忆的实例
Sep 03 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文件压缩之PHPZip类用法实例
2015/06/18 PHP
phalcon框架使用指南
2016/02/23 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
PHP高并发和大流量解决方案整理
2021/03/09 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
JS对象转换为Jquery对象示例
2014/01/26 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
实现python版本的按任意键继续/退出
2016/09/26 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
python zip()函数使用方法解析
2019/10/31 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
Python是什么 Python的用处
2020/05/26 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
如何估计一张表的大小(假设该表中有1万条数据)
2016/03/27 面试题
个人委托书如何写
2014/09/25 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP