想要導航到不同的 URL,則使用 router.push 方法。
這個方法會向 history 棧添加一個新的記錄,所以,當用戶點擊瀏覽器后退按鈕時,則回到之前的 URL。
聲明式 編程式
<router-link :to="..."> router.push(...)
// 字符串
router.push('home')
// 對象
router.push({ path: 'home' })
// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})
// 帶查詢參數,變成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
router.replace(location)
跟 router.push 很像,唯一的不同就是,它不會向 history 添加新記錄,而是跟它的方法名一樣 —— 替換掉當前的 history 記錄。
router.go這個方法的參數是一個整數,意思是在 history 記錄中向前或者后退多少步,類似 window.history.go(n)。
// 在瀏覽器記錄中前進一步,等同於 history.forward()
router.go(1)
// 后退一步記錄,等同於 history.back()
router.go(-1)
// 前進 3 步記錄
router.go(3)
// 如果 history 記錄不夠用,那就默默地失敗唄
router.go(-100)
router.go(100)
一個視圖使用一個組件渲染,因此對於同個路由,多個視圖就需要多個組件
每個鈎子方法接收三個參數:
當一個導航觸發時,全局的 before 鈎子按照創建順序調用。鈎子是異步解析執行,此時導航在所有鈎子 resolve 完之前一直處於等待中。
to: Route: 即將要進入的目標 路由對象
from: Route: 當前導航正要離開的路由
next: Function: 一定要調用該方法來 resolve 這個鈎子。執行效果依賴 next 方法的調用參數。
next(): 進行管道中的下一個鈎子。如果全部鈎子執行完了,則導航的狀態就是 confirmed (確認的)。
next(false): 中斷當前的導航。如果瀏覽器的 URL 改變了(可能是用戶手動或者瀏覽器后退按鈕),那么 URL 地址會重置到 from 路由對應的地址。
next('/') 或者 next({ path: '/' }): 跳轉到一個不同的地址。當前的導航被中斷,然后進行一個新的導航。
確保要調用 next 方法,否則鈎子就不會被 resolved。
同樣可以注冊一個全局的 after 鈎子,不過它不像 before 鈎子那樣,after 鈎子沒有 next 方法,不能改變導航:
for (var i = 0; i < bankcard.length; i++) {
if (i <= 4) {
bankcard = bankcard.slice(0, 5)
} else if (i > 5) {
bankcard = bankcard.slice(0, 5)
bankcards = bankcard.slice(5)
}
bankcard = bankcard.concat(bankcards)
}