feat(nuxt): enable preloading object-syntax routes (#19120)

This commit is contained in:
Alex Liu 2023-03-06 19:34:17 +08:00 committed by GitHub
parent 129bb4fa3a
commit ca32852122
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 5 deletions

View File

@ -1,5 +1,5 @@
import type { Component } from 'vue'
import type { Router } from 'vue-router'
import type { RouteLocationRaw, Router } from 'vue-router'
import { useNuxtApp } from '../nuxt'
import { useRouter } from './router'
@ -34,11 +34,14 @@ function _loadAsyncComponent (component: Component) {
}
}
export async function preloadRouteComponents (to: string, router: Router & { _routePreloaded?: Set<string>; _preloadPromises?: Array<Promise<any>> } = useRouter()): Promise<void> {
export async function preloadRouteComponents (to: RouteLocationRaw, router: Router & { _routePreloaded?: Set<string>; _preloadPromises?: Array<Promise<any>> } = useRouter()): Promise<void> {
if (process.server) { return }
const { path, matched } = router.resolve(to)
if (!matched.length) { return }
if (!router._routePreloaded) { router._routePreloaded = new Set() }
if (router._routePreloaded.has(to)) { return }
if (router._routePreloaded.has(path)) { return }
const promises = router._preloadPromises = router._preloadPromises || []
@ -47,9 +50,9 @@ export async function preloadRouteComponents (to: string, router: Router & { _ro
return Promise.all(promises).then(() => preloadRouteComponents(to, router))
}
router._routePreloaded.add(to)
router._routePreloaded.add(path)
const components = router.resolve(to).matched
const components = matched
.map(component => component.components?.default)
.filter(component => typeof component === 'function')