Vue.js:从api获取数据并将其传递给子组件(简单示例)

时间:2017-12-10 17:57:43

标签: vue.js vuejs2 axios

我想在父组件上使用axios包创建一个ajax请求,并将返回的数组传递给子组件,以便它可以迭代数组并构建布局。我有以下代码。

父母就是这样:

<script>


     import Box from './Box';
     import axios from 'axios';

   export default {
       name : "messagespainel",
       data: function() {
       return {messsages: []}  //should I use data to pass the ajax returned array to the child
    },
         props: ['messages']  //should I use props to pass the ajax returned array to the child
  }


   mounted : 
   {

        axios.get('http://www.omdbapi.com/?s=star&apikey=mykey').then(response => {  this.messsages = response.data.Search});


    }

 </script>

   <template>

  <div>
 <box messages="this.messages"></box> My mind bugs at this point. How to refer to messages?
  </div>

  </template>

孩子是这样的:

  <script>

export default {
name: "box",
props: ['mensagens']

 }

 </script>
  <template>
   <div>
 <div v-for="message in messages" > 
  {{ message}}
  </div>
  </div>

   </template>

   <style>
  </style>

1 个答案:

答案 0 :(得分:4)

在您的父母中,没有必要将messages声明为道具,它是您传递给孩子的数据属性。

import Box from './Box';
import axios from 'axios';

export default {
   name : "messagespainel",
   data: function() {
     return {messages: []}  
   },
   mounted() {
     axios.get('http://www.omdbapi.com/?s=star&apikey=mykey')
       .then(response => {  this.messages = response.data.Search});
   }
}

在模板中,您需要绑定属性。

<box v-bind:messages="messages"></box>

<box :messages="messages"></box>

孩子需要将messages声明为财产。

export default {
  name: "box",
  props: ['messages']
}