元标签
学习如何从Nuxt 2迁移到Nuxt Bridge的新元标签。
如果您需要通过head
访问组件状态,应迁移到使用useHead
。
如果您需要使用Options API,可以在defineNuxtComponent
中使用head()
方法。
迁移
bridge.meta
设置
import { defineNuxtConfig } from '@nuxt/bridge'
export default defineNuxtConfig({
bridge: {
meta: true,
nitro: false // 如果已完成Nitro迁移,设置为true
}
})
更新head属性
在您的nuxt.config
中,将head
重命名为meta
。(注意,对象不再具有用于去重的hid
键。)
export default {
head: {
titleTemplate: '%s - Nuxt',
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ hid: 'description', name: 'description', content: '元描述' }
]
}
}
export default defineNuxtConfig({
app: {
head: {
titleTemplate: '%s - Nuxt',
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ name: 'description', content: '元描述' }
]
}
}
})
useHead
组合式API
Nuxt Bridge提供了新的Nuxt 3元标签API,可通过新的useHead
组合式API访问。
<script setup lang="ts">
useHead({
title: '我的Nuxt应用',
})
</script>
我们建议不要同时使用原生的Nuxt 2
head()
属性和useHead
,因为它们可能会发生冲突。有关如何使用此组合式API的更多信息,请参阅文档。
Options API
<script>
// 如果使用Options API的`head`方法,您必须使用`defineNuxtComponent`
export default defineNuxtComponent({
head (nuxtApp) {
// `head`接收nuxt应用,但无法访问组件实例
return {
meta: [{
name: 'description',
content: '这是我的页面描述。'
}]
}
}
})
</script>
可能的破坏性变更:
head
接收nuxt应用,但无法访问组件实例。如果您的head
代码尝试通过this
或this.$data
访问数据对象,您需要迁移到useHead
组合式API。标题模板
如果您想使用函数(以获得完全控制),则无法在nuxt.config
中设置,建议在/layouts
目录中设置。
layouts/default.vue
<script setup lang="ts">
useHead({
titleTemplate: (titleChunk) => {
return titleChunk ? `${titleChunk} - 站点标题` : '站点标题';
}
})
</script>