电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

如何在Vue 3中擴展Vue Router鏈接詳解

瀏覽:111日期:2022-09-28 14:59:58
前言

<router-link> 標簽是一個很好的工具,可以在你的Vue應用程序的不同頁面之間進行導航,但當導航到一個外部鏈接時,它不是一個工具,為此,你應該使用一個普通的<a> 標簽。也許這只是我的問題,但很多時候,我都懶得去理會這其中的差別。其他時候,鏈接可能是動態的,也就是說,來自數據庫或一些用戶提供的數據源。在這種情況下,你根本不知道這個鏈接是外部的還是內部的,而且在每個可能使用這個鏈接的地方手動做V-if是多么痛苦的事情。

如果只是用一個單一的組件來處理所有的內部和外部鏈接,那不是很好嗎?如果你和我一樣,你現在就會這樣做。

值得慶幸的是,擴展<router-link> 組件是非常簡單的,只需將其包裝在你自己的自定義組件中。讓我們開始吧!讓我們建立一個AppLink 組件,它可以處理任何鏈接,無論是外部還是內部。

AppLink組件

我們應該做的第一件事是讓我們的AppLink組件接受所有與路由器鏈接相同的道具。為什么?這樣我們的組件的 '接口 '就可以模仿Router Link的接口,我們就不會有另一個API需要記住。我們可以通過從Vue Router中導入RouterLink,并將它的props分散到我們組件的props選項中來實現。

// AppLink.vue<script>import {RouterLink} from ’vue-router’export default{ props:{ ...RouterLink.props }}</script>

在模板區,我們現在可以創建一個路由器鏈接標簽,并將我們組件的所有道具綁定到它。我們還需要傳入插槽,以便標簽之間提供的文本和標記將出現在路由器鏈接中。

// AppLink.vue<template> <router-link v-bind='$props'><slot /></router-link></template>

就像現在這樣,我們已經處理了所有的內部鏈接。那么,外部鏈接呢?如前所述,外部鏈接使用a 標簽,所以讓我們把它添加到我們的模板中。像路由器鏈接一樣,我們應該傳遞槽。讓我們也把href 綁定到to 屬性。

// AppLink.vue<template> <a :href='http://www.hdgsjgj.cn/bcjs/to' rel='external nofollow' rel='external nofollow' ><slot/></a> <router-link v-bind='$props'><slot/></router-link></template>

酷,這就說明了內部鏈接和外部鏈接!在這一點上,可能值得注意的是,上述方法只適用于Vue 3,因為它包含了超過1個根元素)。

現在,我們只需要一個條件來告訴我們提供給AppLink的是什么類型的鏈接。我們可以創建一個名為isExternal 的計算屬性來確定這一點。首先,我們要檢查我們的to道具的值是否是一個字符串。這是必要的,因為to 道具可能是一個對象,比如有時傳遞給router-link (即:to='{name:’RouteNameHere’}' )。然后,我們將檢查該字符串是否以http 的字符串開始。如果這兩個條件都是真的,那么我們就有了自己的一個外部鏈接。

// AppLink.vue<script>export default{ //... computed:{ isExternal(){ return typeof this.to === ’string’ && this.to.startsWith(’http’) } }}</script>

router-link在模板區,我們現在可以在一個v-if中使用isExternal 計算的道具,當它是a ,否則就顯示true 。

// AppLink.vue<template> <a v-if='isExternal' :href='http://www.hdgsjgj.cn/bcjs/to' rel='external nofollow' rel='external nofollow' ><slot/></a> <router-link v-else v-bind='$props'><slot/></router-link></template>

就這樣了!我們完成了!在你的應用程序中全局注冊該組件后,你現在可以像這樣使用它。

// Anywhere in your app<AppLink :to='[external-or-internal-link]'>Click Me</AppLink>

如何在Vue 3中擴展Vue Router鏈接詳解

進一步的靈活性

在新標簽頁中打開

讓我們把AppLink 組件變得更加有用。比方說,我們希望所有的外部鏈接總是在新的標簽頁中打開。很簡單。只要在組件中的<a> 標簽上添加一個target='_blank' ,整個網站的所有外部鏈接現在都在新標簽中打開。

// AppLink.vue<template> <a ... target='_blank'><slot/></a> ...</template>

這是你可能希望適用于你網站上大多數外部鏈接的規則,但如果你希望任何特定的外部鏈接在同一標簽中打開,你可以用html目標屬性告訴該鏈接實例這樣做。

<AppLink :to='https://vueschool.io' target='_self'>Vue School</AppLink>

鏈接安全

當你使用target='_blank' 屬性鏈接到另一個網站上的一個頁面時,你最終會使你的網站暴露在性能和安全問題中。

被鏈接的頁面可能最終與你的頁面在同一進程中運行。根據被鏈接頁面的情況,這可能會降低你自己頁面的速度。 另一個頁面也可以通過window.opener 屬性訪問原始頁面window ,造成安全問題。

關于這個問題的更多細節,請看這個信息性的帖子。

解決這個問題的辦法是為你所有的外部鏈接標簽提供一個rel='noopener' 屬性。但要記住這樣做是多么痛苦啊......哦,等等......我們不需要這樣做。我們可以在我們的AppLink 組件中添加一次,就可以了。

// AppLink.vue<template> <a ... rel='noopener'><slot/></a> ...</template>

外部鏈接的獨特風格

我看到一些網站在其網站上的外部鏈接的樣式與通往他們自己網站上其他地方的鏈接有點不同。這可以幫助用戶更好地了解他們是如何在一個他們原本沒有訪問過的網站上結束的。它可以是任何東西,從鏈接旁邊的一個微妙的 '外部鏈接 '圖標到鏈接下面的一個小警告,比如說 '鏈接到第三方網站'。在我們的組件中實現這一點很簡單,只要在我們的模板中的a 標簽上添加一個external-link 類,然后用css來改變它的風格,或者添加一個:after sudo-element。你甚至可以為外部鏈接添加全新的元素,比如一個字體超贊的圖標。

// AppLink.vue// (must have font awesome font included in project)<template> <a ... class='external-link'> <slot/> <i class='fas fa-external-link-alt'></i> </a> ...</template><style scoped>.external-link i { font-size: 0.8em; opacity: 0.7;}</style>總結

這只是你可以擴展router-link以適應常見和特殊情況下的需求的一個嘗試。另外,由于你的所有鏈接都被封裝在一個單一的組件中,你可以很容易地更新你所有鏈接的不同方面。你能想到任何其他有用的方法來改進我們的AppLink 組件嗎?你是否在你的應用程序中使用類似的方法,并有一些智慧可以分享?

到此這篇關于如何在Vue 3中擴展Vue Router鏈接的文章就介紹到這了,更多相關Vue3擴展Vue Router鏈接內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
主站蜘蛛池模板: 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | 节流截止放空阀-不锈钢阀门-气动|电动截止阀-鸿华阀门有限公司 | 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 辽宁资质代办_辽宁建筑资质办理_辽宁建筑资质延期升级_辽宁中杭资质代办 | 拉力机-万能试验机-材料拉伸试验机-电子拉力机-拉力试验机厂家-冲击试验机-苏州皖仪实验仪器有限公司 | 石家庄装修设计_室内家装设计_别墅装饰装修公司-石家庄金舍装饰官网 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 厂厂乐-汇聚海量采购信息的B2B微营销平台-厂厂乐官网 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 钣金加工厂家-钣金加工-佛山钣金厂-月汇好 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 上海乾拓贸易有限公司-日本SMC电磁阀_德国FESTO电磁阀_德国FESTO气缸 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 防伪溯源|防窜货|微信二维码营销|兆信_行业内领先的防伪防窜货数字化营销解决方案供应商 | 液压中心架,数控中心架,自定心中心架-烟台恒阳机电设计有限公司 行星搅拌机,双行星搅拌机,动力混合机,无锡米克斯行星搅拌机生产厂家 | 塑料托盘厂家直销-吹塑托盘生产厂家-力库塑业【官网】 | 石家庄律师_石家庄刑事辩护律师_石家庄取保候审-河北万垚律师事务所 | 智能气瓶柜(大型气瓶储存柜)百科 | 洗瓶机厂家-酒瓶玻璃瓶冲瓶机-瓶子烘干机-封口旋盖压盖打塞机_青州惠联灌装机械 | 建筑资质代办-建筑企业资质代办机构-建筑资质代办公司 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 节流截止放空阀-不锈钢阀门-气动|电动截止阀-鸿华阀门有限公司 | 周易算网-八字测算网 - 周易算网-宝宝起名取名测名字周易八字测算网 | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 广州工业氧气-工业氩气-工业氮气-二氧化碳-广州市番禺区得力气体经营部 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 高压互感器,电流互感器,电压互感器-上海鄂互电气科技有限公司 | 网站建设-临朐爱采购-抖音运营-山东兆通网络科技 | 智慧食堂_食堂管理系统_食堂订餐_食堂消费系统—客易捷 | 包头市鑫枫装饰有限公司| 烘干设备-热泵烘干机_广东雄贵能源设备有限公司 | 老房子翻新装修,旧房墙面翻新,房屋防水补漏,厨房卫生间改造,室内装潢装修公司 - 一修房屋快修官网 | 酒瓶_酒杯_玻璃瓶生产厂家_徐州明政玻璃制品有限公司 | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 | 次氯酸钠厂家,涉水级次氯酸钠,三氯化铁生产厂家-淄博吉灿化工 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 清水-铝合金-建筑模板厂家-木模板价格-铝模板生产「五棵松」品牌 |