mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-25 15:15:19 +00:00
Merge 77a96a27f4
into edc299a043
This commit is contained in:
commit
1cd9f2ebcd
@ -1,5 +1,5 @@
|
|||||||
import { getCurrentInstance, reactive, toRefs } from 'vue'
|
import { getCurrentInstance, reactive, toRefs } from 'vue'
|
||||||
import type { DefineComponent, defineComponent } from 'vue'
|
import type { ComponentInternalInstance, DefineComponent, defineComponent } from 'vue'
|
||||||
import { useHead } from '@unhead/vue'
|
import { useHead } from '@unhead/vue'
|
||||||
import type { NuxtApp } from '../nuxt'
|
import type { NuxtApp } from '../nuxt'
|
||||||
import { useNuxtApp } from '../nuxt'
|
import { useNuxtApp } from '../nuxt'
|
||||||
@ -9,10 +9,8 @@ import { createError } from './error'
|
|||||||
|
|
||||||
export const NuxtComponentIndicator = '__nuxt_component'
|
export const NuxtComponentIndicator = '__nuxt_component'
|
||||||
|
|
||||||
async function runLegacyAsyncData (res: Record<string, any> | Promise<Record<string, any>>, fn: (nuxtApp: NuxtApp) => Promise<Record<string, any>>) {
|
async function runLegacyAsyncData (res: Record<string, any> | Promise<Record<string, any>>, vm: ComponentInternalInstance, route: ReturnType<typeof useRoute>, fn: (nuxtApp: NuxtApp) => Promise<Record<string, any>>) {
|
||||||
const nuxtApp = useNuxtApp()
|
const nuxtApp = useNuxtApp()
|
||||||
const route = useRoute()
|
|
||||||
const vm = getCurrentInstance()!
|
|
||||||
const { fetchKey, _fetchKeyBase } = vm.proxy!.$options
|
const { fetchKey, _fetchKeyBase } = vm.proxy!.$options
|
||||||
const key = (typeof fetchKey === 'function' ? fetchKey(() => '') : fetchKey) ||
|
const key = (typeof fetchKey === 'function' ? fetchKey(() => '') : fetchKey) ||
|
||||||
([_fetchKeyBase, route.fullPath, route.matched.findIndex(r => Object.values(r.components || {}).includes(vm.type))].join(':'))
|
([_fetchKeyBase, route.fullPath, route.matched.findIndex(r => Object.values(r.components || {}).includes(vm.type))].join(':'))
|
||||||
@ -48,11 +46,12 @@ export const defineNuxtComponent: typeof defineComponent =
|
|||||||
...options,
|
...options,
|
||||||
setup (props, ctx) {
|
setup (props, ctx) {
|
||||||
const nuxtApp = useNuxtApp()
|
const nuxtApp = useNuxtApp()
|
||||||
const res = setup ? Promise.resolve(nuxtApp.runWithContext(() => setup(props, ctx))).then(r => r || {}) : {}
|
const res = setup ? Promise.resolve(setup(props, ctx)).then(r => r || {}) : {}
|
||||||
|
|
||||||
const promises: Promise<any>[] = []
|
const promises: Promise<any>[] = []
|
||||||
if (options.asyncData) {
|
if (options.asyncData) {
|
||||||
promises.push(runLegacyAsyncData(res, options.asyncData))
|
const route = useRoute()
|
||||||
|
const vm = getCurrentInstance()!
|
||||||
|
promises.push(nuxtApp.runWithContext(() => runLegacyAsyncData(res, vm, route, options.asyncData)))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.head) {
|
if (options.head) {
|
||||||
|
Loading…
Reference in New Issue
Block a user