VueJS-无法读取未定义的属性“状态”

时间:2020-07-16 00:19:45

标签: vue.js axios

尽管输出正确。我遇到此错误:无法读取未定义的属性“状态”。我怀疑是因为在ajax调用之后添加了列表。我该如何改善呢?

<template v-for="status in showStatus">
    <div class="col-sm-1">{{status}}</div>
</template>

<script>
    var app = new Vue({
        el: "#app",
        data: { 
            listing: []
        },
        created: function(){
            axios.get('/getListing')
            .then(function (response) {
                app.listing = response.data;
            })
            .catch(function (error) {
                console.log(error);
            });
        },
        computed: {
            showStatus(){
                return this.listing[0].status;
            }
        }
    });
</script>

1 个答案:

答案 0 :(得分:1)

正如您所猜测的,这是因为listing从一个空数组开始,该数组在以后时间填充。

您的计算属性对此不做任何检查,this.listing[0]将早于undefined

您只需要在计算出的人口中添加支票

computed: {
  showStatus () {
    return this.listing[0]?.status || []
  }
}

如果您以前没有看过语法,请参见Optional chaining (?.)


一种替代方法是使用一些安全的默认数据初始化listing

data: () => ({
  listing: [{ status: [] }]
})