ElementUI的expand table 点击展开,属性变化未引起表格响应

发布于 2022-09-07 22:39:12 字数 3109 浏览 8 评论 0

最近在给后台管理系统做表格,要求展开可现实详细内容,遇到奇怪的问题(来自后端狗的疑惑),整了个测试代码,发上来“求药”
问题描述 (见代码)

  • 隐藏->展开:以下两个属性没有让网页发生响应
  • 其他列展开->切换当前列展开:这两个属性又能生效

图片描述

<template>
    <el-table
            :data="tableData5"
            style="width: 100%"
            @expand-change="expandChange">
        <el-table-column label="商品 ID"prop="id"></el-table-column>
        <el-table-column label="商品名称" prop="name"></el-table-column>
        <el-table-column label="描述" prop="desc"></el-table-column>
        <el-table-column type="expand">
            <template >
                    <el-table v-loading="loading" :data="subTableData">
                        <el-table-column label="所属店铺" prop="shop"></el-table-column>
                        <el-table-column label="店铺 ID" prop="shopId"></el-table-column>
                        <el-table-column label="商品分类" prop="category"></el-table-column>
                        <el-table-column label="店铺地址" prop="address"></el-table-column>
                    </el-table>
            </template>
        </el-table-column>
    </el-table>
</template>


<script>
    import axios from "axios"
    var Mock = require('mockjs');

    Mock.mock('/subtable/data',[{
            category: '江浙小吃、小吃零食',
            address: '上海市普陀区真北路',
            shop: '王小虎夫妻店',
            shopId: '10333'
        }
    ])

    export default {
        data() {
            return {
                loading:true,
                subTableData:[],
                tableData5: [{
                    id: '12987122',
                    name: '好滋好味鸡蛋仔',
                    desc: '荷兰优质淡奶,奶香浓而不腻',
                }, {
                    id: '12987123',
                    name: '好滋好味鸡蛋仔',
                    desc: '荷兰优质淡奶,奶香浓而不腻',
                }, {
                    id: '12987125',
                    name: '好滋好味鸡蛋仔',
                    desc: '荷兰优质淡奶,奶香浓而不腻',
                }]
            }
        },
        methods: {
            expandChange(row, expandedRows) {
                let _this = this
                //恢复默认值
                _this.loading = true
                _this.subTableData = []
                //加载数据
                axios.get('/subtable/data')
                    .then(function (res) {
                        /**
                         * ----问题描述----
                         * 1.隐藏->展开:以下两个属性没有让网页发生响应
                         * 2.其他列展开->切换当前列展开:这两个属性又能生效
                         */
                        _this.subTableData = res.data
                        _this.loading = false
                    }).catch(function (error) {
                    console.log(error);
                });
                if (expandedRows.length > 1) {
                    //只展开当前选项
                    expandedRows.shift()
                }
            }
        }
    }
</script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

∞琼窗梦回ˉ 2022-09-14 22:39:13

已解决,改完后代码如下:

<template>
    <el-table
            :data="tableData5"
            style="width: 100%"
            row-key="id"
            :expand-row-keys="expandKeys"
            @expand-change="expandChange">
        <el-table-column label="商品 ID"prop="id"></el-table-column>
        <el-table-column label="商品名称" prop="name"></el-table-column>
        <el-table-column label="描述" prop="desc"></el-table-column>
        <el-table-column type="expand">
            <template >
                <el-table v-loading="loading" :data="subTableData">
                    <el-table-column label="所属店铺" prop="shop"></el-table-column>
                    <el-table-column label="店铺 ID" prop="shopId"></el-table-column>
                    <el-table-column label="商品分类" prop="category"></el-table-column>
                    <el-table-column label="店铺地址" prop="address"></el-table-column>
                </el-table>
            </template>
        </el-table-column>
    </el-table>
</template>


<script>
    import axios from "axios"
    var Mock = require('mockjs');

    Mock.mock('/subtable/data',[{
        category: '江浙小吃、小吃零食',
        address: '上海市普陀区真北路',
        shop: '王小虎夫妻店',
        shopId: '10333'
    }
    ])

    export default {
        data() {
            return {
                expandKeys:[],/** 新增 **/
                loading:true,
                subTableData:[],
                tableData5: [{
                    id: '12987122',
                    name: '好滋好味鸡蛋仔',
                    desc: '荷兰优质淡奶,奶香浓而不腻',
                }, {
                    id: '12987123',
                    name: '好滋好味鸡蛋仔',
                    desc: '荷兰优质淡奶,奶香浓而不腻',
                }, {
                    id: '12987125',
                    name: '好滋好味鸡蛋仔',
                    desc: '荷兰优质淡奶,奶香浓而不腻',
                }]
            }
        },
        methods: {
            expandChange(row, expandedRows) {
                if(this.expandKeys.indexOf(row.id)>=0){
                    //收起当前行
                    this.expandKeys.shift()
                    return;
                }
                let _this = this
                //恢复默认值
                _this.loading = true
                _this.subTableData = []
                //加载数据
                axios.get('/subtable/data')
                    .then(function (res) {
                        _this.subTableData = res.data
                        _this.loading = false
                        _this.expandKeys.shift()            /** 新增 **/
                        _this.expandKeys.push(row.id)       /** 新增 **/
                    }).catch(function (error) {
                    console.log(error);
                });
                if (expandedRows.length > 1) {
                    //只展开当前选项
                    expandedRows.shift()
                }
            }
        }
    }
</script>
往事随风而去 2022-09-14 22:39:13

楼上的那种做法,是先获取数据后再展开,这样有的做法页面上是有响应了,但是题主图片的加载效果似乎就没有了,想到了另一种方法,在展开的table中加个默认排序,页面上是可以响应的例如 :default-sort="{prop: 'id', order: 'ascending'}"

审判长 2022-09-14 22:39:13

这个问题应该是在操作数组数据的时候,页面没有检测到数据变化。没有刷新。用$set()显示声明。即可刷新页面了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文