目錄
1,前言
本文主要講開發過程中需要常用的,有些api
不常用,需要的時候可以自行查找文檔。因為V3
中沒有了this
,所以router4
語法有所修改,模板中我們仍然可以訪問$router
和$route
,所以不需要在setup
中返回router
或route
1,Router
這邊主要介紹常用的跳轉方法修改
2.1,跳轉
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,打開新頁面
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,守衛
4.1,onBeforeRouteLeave
可以替代組件內守衛,新增的組合式Api
,離開當前頁面路由時觸發,return false
則阻止跳轉
import { onBeforeRouteLeave } from 'vue-router'
export default {
setup() {
onBeforeRouteLeave((to, from) => {
if (to.name !== 'home') {
return false
}
})
}
}
4.2,onBeforeRouteUpdate
新增的組合式Api
,路由更新時觸發
import { onBeforeRouteUpdate } from 'vue-router'
export default {
setup() {
onBeforeRouteUpdate((to, from) => {
if (to.params.id !== from.params.id) {
console.log('......')
}
})
}
}
4.3,路由守衛語法
// 原寫法
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'
選項替換為更靈活的名稱history
Router3 | Router4 |
---|---|
history | createWebHistory() |
hash | createWebHashHistory() |
abstract | createMemoryHistory() |
-
base
選項移除,修改為createWebHistory
等方法的第1個參數傳遞 -
transition
和keep-alive
必須放在router-view
里面 -
刪除
<router-link>
中的event
和append
和tag
屬性 -
router.onReady()
函數已被router.isReady()
取代 -
刪除
router.match
改為router.resolve
-
所有的導航現在都是異步的,如果使用
transition
,需要等待路由ready
好后再掛載程序 -
帶有空
path
的命名子路由不再添加斜線
如果看了覺得有幫助的,我是@上進的鵬多多,歡迎 點贊 關注 評論;END
PS:在本頁按F12,在console中輸入document.querySelectorAll('.diggit')[0].click(),有驚喜哦
公眾號
往期文章
- 助你上手Vue3全家桶之Vue3教程
- 助你上手Vue3全家桶之VueX4教程
- 使用nvm管理node.js版本以及更換npm淘寶鏡像源
- 超詳細!Vue-Router手把手教程
- vue中利用.env文件存儲全局環境變量,以及配置vue啟動和打包命令
- 微信小程序實現搜索關鍵詞高亮
- 超詳細!Vue的九種通信方式
- 超詳細!Vuex手把手教程
個人主頁