【问题标题】:Quasar display table rows from store object of objectsQuasar 显示来自对象存储对象的表行
【发布时间】:2020-01-31 01:38:49
【问题描述】:

我在我的 q 表中显示数据时遇到问题。问题是因为我将数据作为对象存储在存储中,但是 q-table 需要数据作为对象数组。这是我的代码

store.js

import Vue from 'vue'

    const state = {
        tasks: {
            'ID1': {
                name: 'Go to shop',
                completed: false,
                dueDate: '2019/05/12',
                dueTime: '18:30'
            },
            'ID2': {
                name: 'Get bananas',
                completed: false,
                dueDate: '2019/05/13',
                dueTime: '14:00'
            },
            'ID3': {
                name: 'Get apples',
                completed: false,
                dueDate: '2019/05/14',
                dueTime: '16:00'
            }   
        }
    }

    export default {
        namespaced: true,
        state,
        mutations,
        actions,
        getters
    }

组件

<template>
    <q-page padding>
        <q-table
                padding
                title="Tasks"
                :data="tasks"
                :columns="columns"
                row-key="name"
                hide-bottom
        >
            <template v-slot:body="props">
                <q-tr :props="props">
                    <q-td key="name" :props="props">
                        {{ props.name }}
                    </q-td>
                    <q-td key="created" :props="props">
                        {{ props.created }}
                    </q-td>
                </q-tr>
            </template>
        </q-table>

    </q-page>
</template>

<script>
    import {mapState} from 'vuex'

    export default {
        data () {
            return {
                columns: [
                    { name: 'name', required: true, label: 'Name', align: 'left', field: row => row.name, sortable: true },
                    { name: 'created', required: true, label: 'Created', align: 'left', field: row => row.created, sortable: false },
                ],
            }
        },
        computed: {
            ...mapState('tasks')
        }
    }
</script>

这会产生问题Invalid prop: type check failed for prop "data". Expected Array, got Object。那么我需要如何格式化我的代码以显示表格行,因为存储对象“任务”需要是对象的对象,我不能将其重新格式化为对象数组。

如果您需要任何其他信息,请告诉我,我会提供。谢谢!

【问题讨论】:

    标签: javascript vue.js vuejs2 vuex quasar-framework


    【解决方案1】:

    您可以简单地从 tasks 创建另一个(本地)计算 arrayTasks 并将其用于 q-table

    computed: {
        ...mapState('tasks'),
        arrayTasks() {
            return Object.values(this.tasks);
        }
    }
    

    和模板

    <q-table
        padding
        title="Tasks"
        :data="arrayTasks"
        :columns="columns"
        row-key="name"
        hide-bottom
    >
    

    如果你不需要原始任务作为对象的对象,你也可以这样做

    computed: {
        ...mapState({
            tasks: state => Object.values(state.tasks) // Object values to Array
        })
    }
    

    【讨论】:

    • 是的,这正是我想要的。谢谢!
    • 这非常棒,但是您将如何选择一行并获取密钥?例如,如果我想删除一行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 2015-12-09
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多