如何在Vue.js3中使用Vue3Meta?
似乎Vue Meta已升级为使用名为的新 npm 包处理 Vue.js 3vue-3-meta
在 Vue.js 3 之前,vue-meta通过将其添加到 Vue 实例中很容易使用:
import Vue from 'vue'
import VueMeta from 'vue-meta'
Vue.use(VueMeta, {
// optional pluginOptions
refreshOnceOnNavigation: true
})
但是在 Vue.js 3 中,没有 Vue 实例;而是通过运行createApp这样的方式来创建应用程序:
const app = createApp(App);
const router = createVueRouter();
app.use(router);
// need to make app use Vue-Meta here
我找不到任何文档vue-3-meta。import VueMeta from 'vue-meta'不再有效。
如何vue-3-meta正确导入插件并将其与app之前版本中的一样使用?
回答
免责声明:vue-meta v3仍处于 alpha 阶段!
这是我开始所需的最小实现:
-
更新
vue-meta到 v3(在 package.json 中)- "vue-meta": "^2.4.0", + "vue-meta": "^3.0.0-alpha.7",...或用纱线:
- "vue-meta": "^2.4.0", + "vue-meta": "^3.0.0-alpha.7", -
添加
metaManager到 Vue 应用程序import { createMetaManager } from 'vue-meta' const app = createApp(App) .use(router) .use(store) .use(createMetaManager()) // add this line await router.isReady() app.mount('#app') -
添加
<metainfo>到App.vue<template>(这也是我设置“标题模板”的地方)<template> <metainfo> <template v-slot:title="{ content }">{{ content ? `${content} | SITE_NAME` : `SITE_NAME` }}</template> </metainfo> <header /> <router-view /> <footer /> </template> -
在 App.vue Vue 3 vanilla 中设置默认元
<script>
:import { useMeta } from 'vue-meta' export default { setup () { useMeta({ title: '', htmlAttrs: { lang: 'en', amp: true } }) } }或与
vue-class-component:import { setup, Vue } from 'vue-class-component' import { useMeta } from 'vue-meta' export default class App extends Vue { meta = setup(() => useMeta({ title: '', htmlAttrs: { lang: 'en', amp: true } }) } -
覆盖每个组件Vue 3 vanilla 中的meta
:import { useMeta } from 'vue-meta' export default { setup () { useMeta({ title: 'Some Page' }) } }或与
vue-class-component:import { computed } from '@vue/runtime-core' import { setup, Vue } from 'vue-class-component' import { useMeta } from 'vue-meta' export default class SomePage extends Vue { meta = setup(() => useMeta( computed(() => ({ title: this.something?.field ?? 'Default' }))) ) }
也可以看看:
- “快速使用”(vue-meta
next分支) - Vue Router 示例(vue-meta
next分支)