Vue.js 做為一個面向 MVVM 的 JavaScript 框架,擁有很多核心對象,Vue$root 就是其中之一,它是 Vue.js 的根實例,也是組件的頂層根,是整個應用的載體和入口。
一、Vue$rooter
VueRouter 是 Vue.js 官方的路由器,它與 Vue.js 深度集成,為單頁面應用提供高效的頁面跳轉方式。VueRouter 實例就是 Vue$root 的一個屬性,它主要負責處理 URL 和組件的映射關係。
//創建VueRouter實例
const router = new VueRouter({
routes: [
{ path: '/', component: Home },
{ path: '/about', component: About }
]
})
const app = new Vue({
router
}).$mount('#app')
可以看到,VueRouter 被作為 Vue 根實例的一個屬性,這種寫法是為了讓 VueRouter 參與到 Vue 的聲明周期中。在實例化 Vue 的時候,VueRouter 實例會通過 router 屬性被加入到 Vue 實例中,然後 Vue 實例會自動管理路由,把路由的鉤子函數放到 Vue 的鉤子函數中。
二、Vue$root頁面棧修改
Vue 根實例通過 $router 和 $route 可以獲取到相應的路由信息,其中 $route 用來描述當前路由的一些基礎信息,包括路徑、參數、查詢、哈希、名稱等;而 $router 實例則是 VueRouter 的實例,可以用來操作路由的跳轉,比如路由的 push、replace、back 等等。
在實際開發過程中,可能會需要在 Vue 根實例中控制路由棧的變化,比如通過編寫一個監聽返回鍵的邏輯,控制路由的退棧。在Vue.js 2.x 版本中,可以通過 $router.back() 和 $router.go(n) API 控制路由棧,但在 Vue.js 3.x 版本中已經不再推薦這種操作方式,而建議通過調用 router 對象上的方法,實現路由與業務邏輯的高效耦合。
//將需要控制的路由信息放到路由跳轉的 meta 欄位中,在 router.beforeEach 實現監聽返回鍵功能
router.beforeEach((to, from, next) => {
if (to.meta.goBack) {
window.history.go(-1)
} else {
next()
}
})
這裡通過給需要控制的路由添加一個 meta 欄位,在路由跳轉鉤子函數中實現了對路由棧的監聽和退棧操作。
三、Vue$root選取
Vue 3 中,由於對組件實例進行了重新設計,Vue 2.X 中的 vm._root 被廢除了,取而代之的是通過 app._container 獲取到 Vue 根實例的節點並對其進行操作。
以下是一個基本的 Vue 3 例子。
const root = createApp(App)
root.use(router) //使用VueRouter插件
root.mount('#app') //掛載Vue根實例
在這個例子中,可以通過 createApp 方法創建一個 Vue 根實例,並使用 router 插件來創建並掛載 VueRouter 實例。然後,使用 mount 方法將 Vue 根實例掛載到指定的 DOM 元素上。在 Vue 3 中,app._container 可以通過這樣的方式獲取到 Vue 根實例的容器。
總之,Vue$root 是整個 Vue.js 應用的根實例,在 Vue.js 3 中使用起來更加方便、靈活。通過對 Vue$root 進行深入的了解和掌握,能夠更好地掌控應用的整個生命周期、實現多樣化的邏輯功能,整體提升開發效率與質量。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/151969.html