You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Wuxt(Nuxt.js)中获取WordPress菜单数据并在模板中访问?

解决Wuxt(Nuxt + WordPress)中fetch数据无法在模板访问的问题

你遇到的“data is not defined”问题,核心是没搞清楚Nuxt中fetch方法如何把数据传递给模板。你现在只是在fetch里return了数据,但组件的fetch方法并不会自动把返回值挂载到组件实例上,得手动把数据存到组件的data属性里才行。

给你两种可行的修改方案:

方案一:组件级fetch配合data选项(适合普通组件)

先在组件里定义一个用来存储菜单数据的变量,然后在fetch里把请求到的数据赋值给它:

<template>
  <div>
    <!-- 这里可以直接用menuItems渲染菜单了 -->
    <ul>
      <li v-for="menuItem in menuItems" :key="menuItem.id">
        {{ menuItem.title }}
      </li>
    </ul>
  </div>
</template>

<script>
import axios from 'axios'
import Logo from '~/components/Logo'

export default {
  components: { Logo },
  // 第一步:定义存储菜单的data变量
  data() {
    return {
      menuItems: []
    }
  },
  // 第二步:修改fetch方法,把数据赋值给this.menuItems
  async fetch() {
    try {
      const { data } = await axios.get('http://localhost:3080/wp-json/wuxt/v1/menu')
      this.menuItems = data
    } catch (e) {
      this.$nuxt.error({ message: 'Not found', statusCode: 404 })
    }
  }
}
</script>

方案二:用asyncData(适合页面级组件)

如果你的代码是写在pages/目录下的页面组件里,可以用Nuxt的asyncData方法,它会自动把返回的数据合并到页面的data中:

<template>
  <div>
    <ul>
      <li v-for="menuItem in menuItems" :key="menuItem.id">
        {{ menuItem.title }}
      </li>
    </ul>
  </div>
</template>

<script>
import axios from 'axios'
import Logo from '~/components/Logo'

export default {
  components: { Logo },
  async asyncData({ error }) {
    try {
      const { data } = await axios.get('http://localhost:3080/wp-json/wuxt/v1/menu')
      // 返回的数据会自动挂载到页面实例上
      return { menuItems: data }
    } catch (e) {
      error({ message: 'Not found', statusCode: 404 })
    }
  }
}
</script>

关键说明:

  • 普通组件里不能用asyncData,只能用fetch或者mounted钩子来请求数据并赋值给data变量。
  • 你原来的fetch方法带了{ params, error }参数,那是页面级fetch的写法,但组件级fetch不需要这个上下文参数,直接用this访问组件实例即可。

内容的提问来源于stack exchange,提问作者Gas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:49:53