1. 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" >
2. a 標簽:
W3C中是這樣解釋a標簽的:
<a> 標簽定義超鏈接,用於從一張頁面鏈接到另一張頁面。
從一張頁面跳轉到另一張頁面,但從這里來說就違背了多視圖的單頁Web應用這個概念。
通過a標簽進行跳轉,頁面會被重新渲染,即相當於重新打開一個新的網頁,體現為視覺上的“閃爍”(如果是本地的項目基本看不出來)。
router-link:
<router-link> 組件支持用戶在具有路由功能的應用中 (點擊) 導航。 通過 to 屬性指定目標地址,默認渲染成帶有正確鏈接的 <a> 標簽,可以通過配置 tag 屬性生成別的標簽.。
通過 router-link 進行跳轉不會跳轉到新的頁面,也不會重新渲染,它會選擇路由所指的組件進行渲染,避免了重復渲染的“無用功”。
總結:
對比<a>,router-link 組件避免了不必要的重渲染,它只更新變化的部分從而減少DOM性能消耗。Vue的創新之處在於,它利用虛擬 DOM 的概念和 diff 算法實現了對頁面的"按需更新",Vue-router很好地繼承了這一點,重渲染是我們不希望看到的,因為無論跳轉到哪個頁面,只需要渲染一次就夠了。反觀<a>標簽,每次跳轉都得重渲染一次。
補充:
使用vue中路由router-link中包含a標簽:
1. 當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; },