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

作者:saberrrrrrrr 时间:2024-04-09 10:46:05 

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;

},

来源:https://blog.csdn.net/saber04/article/details/96717294

标签:vue,router-link,a链接
0
投稿

猜你喜欢

  • keras自定义回调函数查看训练的loss和accuracy方式

    2021-01-11 18:13:09
  • Python蛇形方阵的实现

    2023-06-27 16:33:21
  • mysql查询的时候给字段赋默认值操作

    2024-01-15 02:51:53
  • php判断输入不超过mysql的varchar字段的长度范围

    2023-11-14 12:02:10
  • 基于Django的乐观锁与悲观锁解决订单并发问题详解

    2021-07-14 19:42:08
  • linux下安装php扩展memcache的方法

    2023-11-21 19:49:02
  • 分享整理的12条sql语句连同数据

    2012-07-11 16:14:59
  • Python实现新年愿望代码雨效果

    2022-08-02 00:52:35
  • Godaddy 导入导出MSSQL数据库的实现步骤

    2024-01-19 15:11:56
  • python使用docx模块读写docx文件的方法与docx模块常用方法详解

    2022-05-14 11:37:17
  • python实现斐波那契递归函数的方法

    2022-03-22 19:54:49
  • 用DW8制作网页中常用的过度效果

    2007-10-16 12:56:00
  • MySQL Explain命令用于查看执行效果

    2009-02-27 15:30:00
  • ASP实例:读取xml文件的程序

    2007-11-04 18:47:00
  • Python批量重命名同一文件夹下文件的方法

    2021-04-03 08:59:44
  • Django2.1.3 中间件使用详解

    2023-11-06 19:46:00
  • python matplotlib中文显示参数设置解析

    2022-11-18 14:11:41
  • Python logging模块handlers用法详解

    2022-08-24 18:08:08
  • ES6 Promise对象的应用实例分析

    2024-04-19 10:04:20
  • 举例详解Python中循环语句的嵌套使用

    2022-11-23 05:52:07
  • asp之家 网络编程 m.aspxhome.com