如何在 Vue Meta 3 中创建自定义元标签?

vol*_*one 2 vue.js vue-meta vuejs3

我用来Vue Meta 3向网站提供元数据。该 API 在这里

我不明白如何提供自定义元标记(例如 Open Graph 标记,例如og:type)。这是我在组件中尝试做的事情:

setup() {
    useMeta({
      title: "Homepage",
      meta: [
          {name: "hunky:dory", content: "website"}
      ],
      description: "This is the homepage."
    })
  },
Run Code Online (Sandbox Code Playgroud)

输出的 HTML 最终如下所示:

<head>
 <title>Homepage</title>
 <meta name="description" content="This is the homepage.">
 <meta name="meta" content="website"> <!-- should be <meta name="hunky:dory content="website"> -->
</head>
Run Code Online (Sandbox Code Playgroud)

如果我将代码更改为:

setup() {
    useMeta({
      title: "Homepage",
      "hunky:dory": [
          {content: "website"}
      ],
      description: "This is the homepage."
    })
  },
Run Code Online (Sandbox Code Playgroud)

我得到非法的 HTML 输出:

<head>
     <title>Homepage</title>
     <meta name="description" content="This is the homepage.">
     <hunky:dory>website</hunky:dory> <!-- total nonsense -->
    </head>
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到输出:

<head>
         <title>Homepage</title>
         <meta name="description" content="This is the homepage.">
         <meta name="hunky:dory" content="website">
        </head>
Run Code Online (Sandbox Code Playgroud)

Aja*_*les 5

让 og 元工作有 2 个部分——我想我可以帮助第 1 部分:

  1. 正确的vue-meta语法
  2. 服务器端渲染 (SSR)

第 1 部分:Vue 3 的 vue-meta

我用 写了这个vue-class-component,它似乎有效:

meta = setup(() => useMeta(computed(() => ({
  title: this.event?.name ?? 'Event not found',
  og: {
    image: this.event?.bannerUrl ?? 'http://yourwebsite.com/images/default-banner.png'
  }
}))))
Run Code Online (Sandbox Code Playgroud)

...在 vanilla Vue 3 中大概可以翻译成这样:

setup() {  
  useMeta(
    computed(() => ({
      title: this.event?.name ?? 'Event not found',
      og: {
        image: this.event?.bannerUrl ?? 'http://yourwebsite.com/images/default-banner.png'
      }
    }))
  )
}
Run Code Online (Sandbox Code Playgroud)

结果:

<meta property="og:image" content="http://cloudstorage.com/images/event-123.png">
Run Code Online (Sandbox Code Playgroud)

参考:

第 2 部分:SSR

完成第 1 部分后,我意识到我没有设置 SSR...所以我只是为我的用户渲染元,而不是为 Facebook 的爬虫(不是很有用)。恐怕我还没有在我的项目中解决这个问题;也许其他人可以参与那部分!

在那之前,也许这会让你开始:

注意:vue-meta位于NuxtGitHub 组织下 =>您可能会考虑迁移到 Nuxt v3(基于 Vue 构建):