内容模块设置的页面标题在导航后不会变回原样

问题描述 投票:0回答:2

我的网站使用 Nuxt 3 和 Nuxt Content。我在

nuxt.config.ts
文件中设置了默认页面标题(请参阅文档:SEO 和 Meta),内容模块在使用它的每个页面上设置标题。但是,返回任何其他页面不会重置页面标题。它保留最后一个 MarkDown 文件的值,并且不会更改回全局页面标题。导航到另一个 MarkDown 页面会更改标题,但它永远不会从模块设置的最后一个值变回原样。

我还尝试通过 useHead 可组合项而不是运行时配置来设置标题,但结果相同。

我做错了什么吗?如果是,我该如何解决这个问题?或者这是一个已知的错误?

nuxt.js nuxtjs3 nuxt-content
2个回答
4
投票

经过大量搜索,我找到了解决方案:Nuxt 文档中提到了提供

useHead()
可组合项的包。阅读其文档,我发现在多次
useHead()
调用(参见标签重复数据删除)的情况下,默认策略设置只应存在一次的标签 - 例如标题 - 只是用最新的值覆盖任何旧的值。这意味着,由于我只通过
useHead()
文件或在
nuxt.config.ts
文件内调用
app.vue
一次,因此它被内容模块覆盖,然后不再更改。

我认为声明应用程序范围的标题适用于没有显式更改它的每个页面,但事实恰恰相反:每个不想在需要之前打开页面中的标题的页面宣布自己的标题。由于除了替换之外提到的唯一其他策略是合并值,这对于标题来说没有任何意义,我认为这是解决这个问题的预期方法,也是唯一的方法。


0
投票

正如您已经发现的,nuxt 不提供内置选项来设置默认标题。在

nuxt.config.ts
中设置它只需在启动应用程序时设置一次,而不是在导航到新页面后设置。但是,通过中间件自己完成非常容易:

只需创建一个新的全局中间件文件(例如

middleware/resetMeta.global.ts
)并使用您的元默认值添加以下内容:

export default defineNuxtRouteMiddleware(() => {
  useSeoMeta({
    title: "My default title",
    description: "My default description"
  })
})

每次导航到新页面时,这都会重置元信息。在新页面上,您可以

useHead()
覆盖某些值或不执行任何操作以保留中间件设置的默认值。

© www.soinside.com 2019 - 2024. All rights reserved.