Vue.js 如何在(子)组件上使用Axios调用API,并在Nuxt中的页面(父)组件上显示结果?

Vue.js 如何在(子)组件上使用Axios调用API,并在Nuxt中的页面(父)组件上显示结果?,vue.js,axios,vue-component,nuxt.js,Vue.js,Axios,Vue Component,Nuxt.js,如果我在页面组件(mountains.vue)上运行此代码,它将正常工作,我可以在Axios的帮助下从API获取数据: <template> <div> <ul> <li v-for="(mountain, index) in mountains" :key="index"> {{ mountain.title }} </li> <

如果我在页面组件(
mountains.vue
)上运行此代码,它将正常工作,我可以在Axios的帮助下从API获取数据:

<template>
  <div>
    <ul>
      <li v-for="(mountain, index) in mountains" :key="index">
        {{ mountain.title }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      mountains: [],
    };
  },
  async asyncData({ $axios }) {
    const mountains = await $axios.$get("https://api.nuxtjs.dev/mountains");
    return { mountains };
  },
};
</script>
现在,当我运行代码时,使用Axios的数据不再显示。。。那么,在子组件中执行Axios调用之前,如何将数据注入页面组件?

根据:

此目录中的组件将无权访问

这意味着
components
文件夹中的任何组件都无法访问该方法。

根据:

此目录中的组件将无权访问


这意味着
components
文件夹中的任何组件都无法访问该方法。

asyncData
只能在页面上工作

从文件中

每次加载页面组件之前都会调用asyncData

实现所需的一种方法是将山脉作为道具传递给
MountainList
组件。像下面这样的

<template>
  <MountainList :mountains="mountains" />
</template>

<script>
export default {
  async asyncData({ $axios }) {
    const mountains = await $axios.$get("https://api.nuxtjs.dev/mountains");
    return { mountains };
  },
};
</script>

导出默认值{
异步数据({$axios}){
const mountains=等待$axios.$get(“https://api.nuxtjs.dev/mountains");
返回{山脉};
},
};
还有代码和道具的组件

<template>
  <div>
    <ul>
      <li v-for="(mountain, index) of mountains" :key="index">
        {{ mountain.title }}
      </li>
    </ul>
  </div>
</template>
    
<script>
export default {
  props: ['mountains'],
};
</script>

  • {{mountain.title}}
导出默认值{ 道具:[山], };
如果您确实想在子组件中进行API调用,可以使用该方法


此外,不应在页面上定义
data()
属性。我相信它将覆盖服务器呈现的数据。

asyncData
仅在页面上有效

从文件中

每次加载页面组件之前都会调用asyncData

实现所需的一种方法是将山脉作为道具传递给
MountainList
组件。像下面这样的

<template>
  <MountainList :mountains="mountains" />
</template>

<script>
export default {
  async asyncData({ $axios }) {
    const mountains = await $axios.$get("https://api.nuxtjs.dev/mountains");
    return { mountains };
  },
};
</script>

导出默认值{
异步数据({$axios}){
const mountains=等待$axios.$get(“https://api.nuxtjs.dev/mountains");
返回{山脉};
},
};
还有代码和道具的组件

<template>
  <div>
    <ul>
      <li v-for="(mountain, index) of mountains" :key="index">
        {{ mountain.title }}
      </li>
    </ul>
  </div>
</template>
    
<script>
export default {
  props: ['mountains'],
};
</script>

  • {{mountain.title}}
导出默认值{ 道具:[山], };
如果您确实想在子组件中进行API调用,可以使用该方法

此外,不应在页面上定义
data()
属性。我相信它会覆盖服务器渲染的数据