无法读取未定义的属性“长度””

新手上路,请多包涵

我收到以下错误。奇怪的是,我确信数据在那里,因为在我的 vue 插件中,我可以看到它成功地从 vuex 存储中获取了信息。我最初的猜测是,在它创建模板时,数据还没有从商店中获取?

 Vue warn]: Error in render: "TypeError: Cannot read property 'length' of undefined"

数据: “空间”是从商店中获取的。

     export default {
        name: "myspaces",
        data() {
            return {
                filterMaxLength: 3,
                selectedSpace: 0,
                selectedRoom: 0
            }
        },
        created() {
            // Default selected space (first in json)
            this.selectedSpace = this.spaces[0].id;

            // Default selected room (first in json)
            this.selectedRoom = this.spaces[0].rooms[0].id;
        },
        computed: {
            // Get 'spaces' from store.
            ...mapState([
                'spaces'
            ])
    }

模板:

 <template>
      <div>
         <v-flex v-if="spaces.length < filterMaxLength">
              <v-btn v-for="space in spaces">
                 <h4> {{space.name}} </h4>
              </v-btn>
         </v-flex>
     </div>
<template>

商店:

     import Vuex from 'vuex'

Vue.use(Vuex);

export default new Vuex.Store({
    state: {
        spaces:[
            {
                id:1,
                name:'House in Amsterdam',
                rooms:[
                    {
                        id:1,
                        name:'Bedroom Otto',
                    },
                    {
                        id:2,
                        name:'Bedroom Mischa'
                    }
                ]
            },
            {
                id:2,
                name:'Office in Amsterdam',
                rooms:[
                    {
                        id:1,
                        name:'Office 1',
                    },
                    {
                        id:2,
                        name:'Office 2'
                    }
                ]
            }
        ]} });

vue chrome add on 说这个信息在组件中:

在此处输入图像描述

原文由 Otto 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 372
2 个回答

始终在检查长度之前,确保您的属性已设置,然后检查长度

<v-flex v-if="spaces && spaces.length < filterMaxLength">

更新 ECMAScript 2020

您也可以为此目的使用 可选链接

<v-flex v-if="spaces?.length < filterMaxLength">

原文由 Mohsen 发布,翻译遵循 CC BY-SA 4.0 许可协议

您应该使用 Object.keys(spaces).length ,例如:

 <template>
      <div>
         <v-flex v-if="typeof spaces !== 'undefined' && typeof spaces === 'object' && Object.keys(spaces).length < filterMaxLength">
              <v-btn v-for="space in spaces">
                 <h4> {{space.name}} </h4>
              </v-btn>
         </v-flex>
     </div>
<template>

原文由 Max S. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题