透過 100 多個訣竅學習 Nuxt!

NuxtApp

在 Nuxt 3 中,您可以在 composables、components 和 plugins 中存取執行階段應用程式上下文。

在 Nuxt 3 中,您可以在 composables、components 和 plugins 中存取執行階段應用程式上下文。

在 Nuxt 2 中,這被稱為 **Nuxt context**。

Nuxt 應用程式介面

跳至 NuxtApp 介面文件。

Nuxt 上下文

許多 composables 和實用工具(無論是內建或使用者建立的)可能需要存取 Nuxt 實例。這並非在應用程式的任何地方都存在,因為每次請求都會建立一個新的實例。

目前,Nuxt 上下文僅能在 pluginsNuxt hooksNuxt middleware(如果包裝在 defineNuxtRouteMiddleware 中)以及 setup functions(在 pages 和 components 中)中存取。

如果 composable 在沒有上下文存取權限的情況下被呼叫,您可能會收到錯誤訊息,指出「需要在 plugin、Nuxt hook、Nuxt middleware 或 Vue setup function 之外呼叫需要存取 Nuxt 實例的 composable。」在這種情況下,您也可以使用 nuxtApp.runWithContext 在此上下文中明確呼叫函數。

存取 NuxtApp

在 composables、plugins 和 components 中,您可以使用 useNuxtApp() 存取 nuxtApp

composables/useMyComposable.ts
export function useMyComposable () {
  const nuxtApp = useNuxtApp()
  // access runtime nuxt app instance
}

如果您的 composable 並非總是需要 nuxtApp,或者您只是想檢查它是否存在,由於 useNuxtApp 會拋出例外,您可以改用 tryUseNuxtApp

為了方便起見,Plugins 也會收到 nuxtApp 作為第一個引數。

文件 > 指南 > 目錄結構 > Plugins 中閱讀更多資訊。

提供輔助工具

您可以提供輔助工具,以便在所有 composables 和應用程式中使用。這通常在 Nuxt plugin 中發生。

const nuxtApp = useNuxtApp()
nuxtApp.provide('hello', (name) => `Hello ${name}!`)

console.log(nuxtApp.$hello('name')) // Prints "Hello name!"
可以透過在 plugins 中傳回具有 provide 鍵的物件來注入輔助工具。
在 Nuxt 2 plugins 中,這被稱為 **inject function**。