1. 程式人生 > 程式設計 >詳談vue中router-link和傳統a連結的區別

詳談vue中router-link和傳統a連結的區別

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連結的區別就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。