<router-link> 組件支持用戶在具有路由功能的應用中 (點擊) 導航。 通過 to 屬性指定目標地址,默認渲染成帶有正確鏈接的 <a> 標簽,可以通過配置 tag 屬性生成別的標簽.。另外,當目標路由成功激活時,鏈接元素自動設置一個表示激活的 CSS 類名。
好處:
-
無論是 HTML5 history 模式還是 hash 模式,它的表現行為一致,所以,當你要切換路由模式,或者在 IE9 降級使用 hash 模式,無須作任何變動。
-
在 HTML5 history 模式下,
router-link
會攔截點擊事件,讓瀏覽器不在重新加載頁面。 -
當你在 HTML5 history 模式下使用
base
選項之后,所有的to
屬性都不需要寫(基路徑)了。
以下兩種實現方式得到的效果一樣
一、
<a href="#/login">登陸</a>
<a href="#/register">注冊</a>
二、
<router-link to="/login">登陸</router-link>
<router-link to="/register">注冊</router-link>
<router-link>默認渲染為一個<a>標簽
假如我們想把<router-link>渲染成其他標簽,可修改其屬性tag,如:
<router-link to="/login" tag=“span”>登陸</router-link>
<router-link to="/register">注冊</router-link>

e.g.
表示目標路由的鏈接。當被點擊后,內部會立刻把 to
的值傳到 router.push()
,所以這個值可以是一個字符串或者是描述目標位置的對象
<!-- 字符串 --> <router-link to="home">Home</router-link> <!-- 渲染結果 --> <a href="home">Home</a> <!-- 使用 v-bind 的 JS 表達式 --> <router-link v-bind:to="'home'">Home</router-link> <!-- 不寫 v-bind 也可以,就像綁定別的屬性一樣 --> <router-link :to="'home'">Home</router-link> <!-- 同上 --> <router-link :to="{ path: 'home' }">Home</router-link> <!-- 命名的路由 --> <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> <!-- 帶查詢參數,下面的結果為 /register?plan=private --> <router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link>
以上是router-link,還有一種在js中使用的方式
在vue.js中想要跳轉到不同的 URL,需要使用 router.push 方法。
這個方法會向 history 棧添加一個新的記錄,當用戶點擊瀏覽器后退按鈕時,則回到之前的 URL。
當你點擊 <router-link> 時,這個方法會在內部調用,所以說,點擊 <router-link :to="..."> 等同於調用 router.push(...)。
聲明式:<router-link :to="...">
編程式:router.push(...)
該方法的參數可以是一個字符串路徑,或者一個描述地址的對象。
// 字符串 router.push('home') // 對象 this.$router.push({path: '/login?url=' + this.$route.path}); // 命名的路由 router.push({ name: 'user', params: { userId: 123 }}) // 帶查詢參數,變成/backend/order?selected=2 this.$router.push({path: '/backend/order', query: {selected: "2"}}); // 設置查詢參數 this.$http.post('v1/user/select-stage', {stage: stage}) .then(({data: {code, content}}) => { if (code === 0) { // 對象 this.$router.push({path: '/home'}); }else if(code === 10){ // 帶查詢參數,變成/login?stage=stage this.$router.push({path: '/login', query:{stage: stage}}); } }); // 設計查詢參數對象 let queryData = {}; if (this.$route.query.stage) { queryData.stage = this.$route.query.stage; } if (this.$route.query.url) { queryData.url = this.$route.query.url; } this.$router.push({path: '/my/profile', query: queryData});
replace,跳轉不留歷史記錄
類型: boolean
默認值: false
設置 replace 屬性的話,當點擊時,會調用 router.replace() 而不是 router.push(),於是導航后不會留下 history 記錄。即使點擊返回按鈕也不會回到這個頁面。
//加上replace: true后,它不會向 history 添加新記錄,而是跟它的方法名一樣 —— 替換掉當前的 history 記錄。
this.$router.push({path: '/home', replace: true})
//如果是聲明式就是像下面這樣寫:
<router-link :to="..." replace></router-link>
// 編程式:
router.replace(...)
參考文章