开发者问题收集

未捕获(在承诺中)TypeError:无法使用 axios 设置未定义的属性

2017-08-17
24205

我有这个 vue.js 组件,它使用 axios 来检索 joke 对象的 json 数组:

<template>
  <div id="show-jokes-all">
        <h2>Showing all jokes</h2>
        <div v-for="joke in jokes">
                <h2>{{joke.title}}</h2>
                <article>{{joke.body}}</article>
            <hr>
        </div>  

  </div>
</template>

<script>
import axios from 'axios';

    export default {
        name: 'showJokes',

      data () {
        return {
            jokes:[]

        }
      },

      methods: {

      },

      created() {
        axios.get('http://127.0.0.1:8090/api/jokes).then(function(data){    
       //console.log(data); works fine
        this.jokes = data.body;
        });
    }
}
</script>

当我在控制台中记录结果时很好,但是当我尝试将其放入 jokes 数组中时,我得到了

Uncaught (in promise) TypeError: Cannot set property 'jokes' of undefined

这可能是一个微不足道的错误,但作为 vue.js 的新手,我对此很了解,因此非常感谢您的提示。

2个回答

您已脱离 this 上下文。您应该将 this 上下文存储在变量中。

 created() {
    let self = this
    axios.get('http://127.0.0.1:8090/api/jokes').then(function(data){    
   //console.log(data); works fine
    self.jokes = data.body;
    });
}

如何在回调中访问正确的 this 中有很多方法。您可以参考此处了解多种方法。

感谢 Bert 的评论

Cholowao
2018-02-26

是的,你可以使用 ES6。

<template>
    <div id="show-jokes-all">
        <h2>Showing all jokes</h2>
        <div v-for="joke in jokes">
            <h2>{{joke.title}}</h2>
            <article>{{joke.body}}</article>
            <hr>
        </div>  
    </div>
</template>

<script>
import axios from 'axios';
  export default {
    name: 'showJokes',
    data () {
      return {
        jokes:[]
      }
    },
    methods: {
    },
    created() {
      axios.get('http://127.0.0.1:8090/api/jokes').then((data) => {    
      // console.log(data); // works fine
      this.jokes = data.body;
    });
  }
}
</script>
Jian Lan
2018-11-30