跳至内容

Firebase 服务

VueFire 提供了一组可组合函数来访问一些不同的 Firebase 服务。这些都以以 use 开头的可组合函数的形式公开。

vue
<script setup>
import {
  useFirebaseApp,
  useAuth,
  useDatabase,
  useFirestore,
  useFirebaseStorage,
  // etc
} from 'vuefire'

const firebaseApp = useFirebaseApp()
const auth = useAuth()
const database = useDatabase()
const firestore = useFirestore()
const storage = useFirebaseStorage()
</script>

作为 所有可组合函数,这些必须在 可注入上下文 中调用,例如组件的 setup、Pinia 商店或路由导航守卫。但是,只要您传递 Firebase 应用名称作为参数,您就可以在应用程序中的任何位置调用这些特定的 Firebase 服务可组合函数。

提示

仅当在 setup 之外使用可组合函数且满足以下条件之一时,才需要 Firebase 名称参数

  • 您正在进行 SSR
  • 您有多个 Firebase 应用

在所有其他情况下省略名称,它只是不需要。

其他 Firebase 服务

对于 VueFire 未涵盖的任何其他服务,您应该通过将 firebase 应用作为第一个参数直接使用 Firebase SDK

vue
<script setup>
import { useFirebaseApp } from 'vuefire'
import { getMessaging } from 'firebase/messaging'

const firebaseApp = useFirebaseApp()
const messaging = getMessaging(firebaseApp)
</script>

如果您发现自己经常使用它,可以为它创建一个可组合函数

ts
import { getMessaging } from 'firebase/messaging'
import { useFirebaseApp } from 'vuefire'

export function useFirebaseMessaging() {
  return getMessaging(useFirebaseApp())
}
vue
<script setup>
import { useFirebaseMessaging } from '~/composables/firebase-messaging'

const messaging = useFirebaseMessaging()
</script>

对于需要初始化的服务,您应该在 Firebase 应用初始化的同时进行初始化

ts
import { initializeApp } from 'firebase/app'
import { initializeAnalytics } from 'firebase/analytics'

export const firebaseApp = initializeApp({
  // config
})
initializeAnalytics(firebaseApp)

Nuxt

在 Nuxt 的上下文中,您可以在 plugins/ 文件夹中创建一个插件,它将被 Nuxt 自动拾取

ts
import {
  type Analytics,
  initializeAnalytics,
  isSupported,
} from 'firebase/analytics'

export default defineNuxtPlugin(async () => {
  const firebaseApp = useFirebaseApp()

  console.log('Loading analytics')

  let analytics: Analytics | null = null
  if (await isSupported()) {
    analytics = initializeAnalytics(firebaseApp)
    console.log('Loaded analytics')
  } else {
    console.log('Analytics not supported')
  }

  return {
    provide: {
      analytics,
    },
  }
})

.client 后缀对于仅在客户端运行的服务(如分析)很重要。有关更多信息,请参阅 Nuxt 文档