助你上手Vue3全家桶之Vue-Router4教程

1,前言


本文主要講開發(fā)過程中需要常用的,有些api不常用,需要的時(shí)候可以自行查找文檔。因?yàn)?code>V3中沒有了this,所以router4語(yǔ)法有所修改,模板中我們?nèi)匀豢梢栽L問$router$route,所以不需要在setup中返回routerroute

Vue-Router4.0官網(wǎng)

1,Router


這邊主要介紹常用的跳轉(zhuǎn)方法修改

2.1,跳轉(zhuǎn)


import { onMounted } from 'vue'
import { useRouter } from 'vue-router'

export default {
    name: 'Home',
    setup() {
        const Router = useRouter()
        const to = function() {
            Router.push({
                name: 'About',
                params: {
                    id: 999
                }
            })
        }
        onMounted(() => {
            console.log(Router)
        })
        return {
            to
        }
    }
}

2.2,打開新頁(yè)面


import { useRouter } from 'vue-router'

export default {
    name: 'Home',
    setup() {
        const Router = useRouter()
        const toBlank = function() {
            const Path = Router.resolve({
                    name: 'About',
                    query: {
                        id: '123'
                    }
            })
            window.open(Path.href, '_blank')
        }
        return {
            toBlank
        }
    }
}

3,Route


這邊主要講一下如何獲取路由傳遞的值

路由取值

import { onMounted } from 'vue'
import { useRoute } from 'vue-router'

export default {
    name: 'Home',
    setup() {
        const Route = useRoute()
        onMounted(() => {
            console.log('onMounted')
            console.log(Route.params.id)
            console.log(Route.meta)
        })
    }
}

4,守衛(wèi)


4.1,onBeforeRouteLeave


可以替代組件內(nèi)守衛(wèi),新增的組合式Api,離開當(dāng)前頁(yè)面路由時(shí)觸發(fā),return false則阻止跳轉(zhuǎn)

import { onBeforeRouteLeave } from 'vue-router'

export default {
  setup() {
    onBeforeRouteLeave((to, from) => {
      if (to.name !== 'home') {
          return false
      }
    })
  }
}

4.2,onBeforeRouteUpdate


新增的組合式Api,路由更新時(shí)觸發(fā)

import { onBeforeRouteUpdate } from 'vue-router'

export default {
  setup() {
    onBeforeRouteUpdate((to, from) => {
      if (to.params.id !== from.params.id) {
        console.log('......')
      }
    })
  }
}

4.3,路由守衛(wèi)語(yǔ)法


// 原寫法
Router.beforeEach((to, from, next) => {
  if (ok) {
    next()
  } else {
    next(false)
  }
})

// 新寫法
Router.beforeEach((to, from) => {
    if (ok) {
        console.log('...')
    } else {
        return false
    }
})

5,重要變更


  • 使用createRouter替換new Router()

  • mode: 'history'選項(xiàng)替換為更靈活的名稱history

Router3 Router4
history createWebHistory()
hash createWebHashHistory()
abstract createMemoryHistory()
  • base選項(xiàng)移除,修改為createWebHistory等方法的第1個(gè)參數(shù)傳遞

  • transitionkeep-alive必須放在router-view里面

  • 刪除<router-link>中的eventappendtag屬性

  • router.onReady()函數(shù)已被router.isReady()取代

  • 刪除router.match改為router.resolve

  • 所有的導(dǎo)航現(xiàn)在都是異步的,如果使用transition,需要等待路由ready好后再掛載程序

  • 帶有空path的命名子路由不再添加斜線


如果看了覺得有幫助的,我是@鵬多多11997110103,歡迎 點(diǎn)贊 關(guān)注 評(píng)論;
END

PS:在本頁(yè)按F12,在console中輸入document.querySelectorAll('._2VdqdF')[0].click(),有驚喜哦

往期文章

個(gè)人主頁(yè)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容