vol*_*one 7 javascript vue.js vue-meta vuejs3
似乎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
})
Run Code Online (Sandbox Code Playgroud)
但是在 Vue.js 3 中,没有 Vue 实例;而是通过运行createApp这样的方式来创建应用程序:
const app = createApp(App);
const router = createVueRouter();
app.use(router);
// need to make app use Vue-Meta here
Run Code Online (Sandbox Code Playgroud)
我找不到任何文档vue-3-meta。import VueMeta from 'vue-meta'不再有效。
如何vue-3-meta正确导入插件并将其与app之前版本中的一样使用?
Aja*_*les 12
这是我开始所需的最小实现:
更新vue-meta到 v3(在 package.json 中)
- "vue-meta": "^2.4.0",
+ "vue-meta": "^3.0.0-alpha.7",
Run Code Online (Sandbox Code Playgroud)
...或用纱线:
- "vue-meta": "^2.4.0",
+ "vue-meta": "^3.0.0-alpha.7",
Run Code Online (Sandbox Code Playgroud)
添加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')
Run Code Online (Sandbox Code Playgroud)
添加<metainfo>到App.vue <template>(这也是我设置“标题模板”的地方)
<template>
<metainfo>
<template v-slot:title="{ content }">{{ content ? `${content} | SITE_NAME` : `SITE_NAME` }}</template>
</metainfo>
<header />
<router-view />
<footer />
</template>
Run Code Online (Sandbox Code Playgroud)
在 App.vue Vue 3 vanilla 中设置默认元<script>
:
import { useMeta } from 'vue-meta'
export default {
setup () {
useMeta({
title: '',
htmlAttrs: { lang: 'en', amp: true }
})
}
}
Run Code Online (Sandbox Code Playgroud)
或与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 }
})
}
Run Code Online (Sandbox Code Playgroud)
覆盖每个组件Vue 3 vanilla 中的meta
:
import { useMeta } from 'vue-meta'
export default {
setup () {
useMeta({ title: 'Some Page' })
}
}
Run Code Online (Sandbox Code Playgroud)
或与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' })))
)
}
Run Code Online (Sandbox Code Playgroud)
除了前面的答案之外,我还需要transpileDependency在我的中添加一个vue.config.js,因为我正在使用vue-cli:
module.exports = {
transpileDependencies: ['vue-meta']
}
Run Code Online (Sandbox Code Playgroud)
否则,我会收到错误:
error in ./node_modules/vue-meta/dist/vue-meta.esm-browser.min.js
Module parse failed: Unexpected token (8:7170)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
Run Code Online (Sandbox Code Playgroud)
感谢该线程向我指出这一点: https: //stackoverflow.com/a/65844988/3433137
| 归档时间: |
|
| 查看次数: |
4576 次 |
| 最近记录: |