vue.js Nuxt 3:在脚本设置中调用的插件函数工作,但抛出TypeError

von4xj4u  于 2023-10-23  发布在  Vue.js
关注(0)|答案(2)|浏览(214)

在我的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。

zkure5ic

zkure5ic1#

注入的函数似乎在创建时不可用,请尝试在运行它之前添加条件:

if($setTags){
  $setTags(data.value);
}
8wigbo56

8wigbo562#

我的错误。因为我只想使用服务器端的插件,它显然是不可用的客户端,因此$setTag(...)也不是。按如下方式 Package 函数可以解决这个问题:

<script setup>
...
if (process.server) {
  $setTags(data.value);
}
</script>

相关问题