Laravel 5.7-如何使用axios.get从API检索数据?

时间:2019-02-26 05:21:03

标签: laravel laravel-5 vue.js

我正在尝试从Laravel Vue组件中的API获取数据。 我在控制台中收到此错误:

  

TypeError:无法设置未定义的属性“大陆”

我想念什么?

这是我的代码:

<script>
    export default {
        mounted() {
            console.log('Component mounted.');
        },
        created(){
            this.loadData();
        },
        data() {  
            return {
                continents: [],
            }
       },
       methods: {
            loadData: function() {
                axios.get('/api/continents')
                  .then(function (response) {
                    // handle success
                    console.log(response.data);
                    this.continents = response.data;
                  })
                  .catch(function (error) {
                    // handle error
                    console.log(error);
                  })
                  .then(function () {
                    // always executed
                  });
            },       
        },  
    }
</script>

3 个答案:

答案 0 :(得分:4)

这是axios.get请求的简单工作演示

var app = new Vue({
  el: '#app',
  data: {
    users:[]
  },
  mounted(){
     this.loadData();
  },
  methods:{
     loadData:function(){
  axios.get('https://jsonplaceholder.typicode.com/users').then(res=>{
       if(res.status==200){
         this.users=res.data;
       }
     }).catch(err=>{
         console.log(err)
     });
     }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

<div id="app">
 <ol>
    <li v-if="users.length>0" v-for="user in users">
      {{ user.name }}
    </li>
  </ol>
</div>

答案 1 :(得分:1)

您应在通话中使用箭头功能,因为此功能在您的实例中不可用。然后使用promise功能。因此,请尝试如下操作。

详细了解箭头功能here

methods: {
        loadData: function() {
            axios.get('/api/continents')
              .then((response) => {
                // handle success
                console.log(response.data);
                this.continents = response.data;
              })
              .catch(function (error) {
                // handle error
                console.log(error);
              })
              .then(function () {
                // always executed
              });
        },       
    },  

答案 2 :(得分:1)

在方法中,必须在回调函数中使用箭头函数语法,以使数据属性可访问。 当使用常规语法声明该函数时,将添加一个“子作用域”,并且回调函数中的this.components会在回调函数中引用“ this”。

将您的方法更改为:

loadData() {
            axios.get('/api/continents')
              .then((response) => {
                // handle success
                console.log(response.data);
                //now this refers to your vue instance and this can access you data property
                this.continents = response.data;
              })
              .catch((error) => {
                // handle error
                console.log(error);
              })
              .then(() => {
                // always executed
              });
        },