在我的Nuxt 3项目中,我构建了一个服务器插件来设置Meta头标签。在我的页面/路由中,我首先从后端获取数据,然后调用插件。内容按预期显示在html文档中,但浏览器控制台抛出错误:Unhandled Promise Rejection: TypeError: $setTags is not a function. (In '$setTags(data.value)', '$setTags' is undefined)
plugins/headTags.server.js
export default defineNuxtPlugin(nuxtApp => {
nuxtApp.provide("setTags", (data) => {
const runtimeConfig = useRuntimeConfig();
useServerSeoMeta({
// ...
})
useServerHead({
// ...
})
});
});
pages/page.vue
<script setup>
const { $setTags } = useNuxtApp()
const { find } = useStrapi4();
const {data} = await useAsyncData(
"posts",
async () => {
const response = await find(...);
const data = response.data[0].attributes;
return data;
}
);
console.log(data) // Contains the data as expected.
$setTags(data.value); // Works but still throws the error.
</script>
如果我将$setTags()
函数移到return语句之前的$setTags()
函数,则数据对象将为null。
2条答案
按热度按时间zkure5ic1#
注入的函数似乎在创建时不可用,请尝试在运行它之前添加条件:
8wigbo562#
我的错误。因为我只想使用服务器端的插件,它显然是不可用的客户端,因此
$setTag(...)
也不是。按如下方式 Package 函数可以解决这个问题: