<router-link>
标签是用于在Vue应用程序的不同页面之间跳转,但它不是跳转到外部链接,相反,我们一般使用 <a>
标签。
也许只有我这么认为,但很多时候,我无法跟上这种差异。其他时候,链接可能是动态的,即来自数据库或用户提供的某个数据源。在这种情况下,你根本不知道链接是外部的还是内部的,在每个可能使用链接的地方手动做一个v-if
是多么痛苦。
如果只用一个组件来处理所有内部和外部的链接,那不是很好吗?
幸运的是,扩展<router-link>
组件非常简单,只需将它包装到我们自己的定制组件中。Ok,我们需要构建一个AppLink
组件来处理链接,无论是外部的还是内部的。
AppLink
组件
AppLink
组件的 props 要包含 router-link
的所有 props
。为什么? 因为这样我们组件的“接口”就可以模仿 Router Link 的接口,无需再记住另一个API。 我们可以通过从Vue Router导入 RouterLink 并将其 props
解构到我们的组件中,如下所示:
// AppLink.vue
在 template
中,创建 router-link
并将 props 传递给它,我们还需要传入slot
,这个可以在 router-link
插入内容。
// AppLink.vue
到目前为止,我们已经处理了所有内部链接,那外部链接呢? 如前所述,外部链接使用a
标签,因此我们将其添加到template
中。 像 router link 一样,并将传入的 to
值赋值给 href
。
// AppLink.vue
这样内部和外部链接都有了对应的处理,需要注意的是,以上内容仅适用于 Vue3,因为它包含多个根元素。
现在,我们需要一个计算属性来告诉AppLink
使用哪种链接,我们先取名为isExternal
。
首先,我们检查prop
的值是否为字符串。 这是必需的,因为to
属性可能是一个对象,例如有时传递到router-link
(即::to="{name:'RouteNameHere'}"
)。 然后,我们将查字符串是否以http
字符串开头。 如果这两个条件都成立,那么就判断是一个外部链接。
// AppLink.vue
有了 isExternal
计算属性之后,我们就可以使用 v-if
来进行操作,如下所示:
// AppLink.vue
大功告成,我们可以这样来使用 AppLink 组件。
// Anywhere in your app
Click Me
更高的灵活性
在新窗口中打开
我们可以多添加一些常用的功能。例如,我们希望外部链接都在新窗口中打开,这样很简单就能做到了,只要把 target="_blank"
添加到我们的 a
标签中即可。
// AppLink.vue
<a … target=“_blank”>
…
当然,有些外部链接不需要在新窗口中打开,我们可以通过指定 target
来告诉组件内部打开链接的方式,如下所示:
Vue School
链接安全
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
![](https://i-blog.csdnimg.cn/blog_migrate/1a71c63403f726d222296b38b17f498a.jpeg)
最后
分享一套阿里大牛整理的前端资料给大家,点击前端校招面试题精编解析大全即可免费下载
❤️ 谢谢支持,喜欢的话别忘了 关注、点赞哦。
讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
![](https://i-blog.csdnimg.cn/blog_migrate/1a71c63403f726d222296b38b17f498a.jpeg)
最后
分享一套阿里大牛整理的前端资料给大家,点击前端校招面试题精编解析大全即可免费下载
❤️ 谢谢支持,喜欢的话别忘了 关注、点赞哦。