Не удается прочитать свойство 'длина' из неопределенного " - PullRequest
0 голосов
/ 03 июля 2018

Я получаю ошибку ниже. Странная часть в том, что я уверен, что данные есть, потому что в моем дополнении 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 говорит, что эта информация находится в компоненте:

enter image description here

1 Ответ

0 голосов
/ 30 августа 2018

Вы должны использовать 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>
...