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()
属性。我相信它会覆盖服务器渲染的数据