codebook

slot-scope

从 3.2.0 版本开始支持 slot-scope 写法。
在 columns 的某列声明 slot 后,就可以在 Table 的 slot 中使用 slot-scope。
slot-scope 的参数有 3 个:当前行数据 row,当前列数据 column,当前行序号 index。

示例可编辑表格

<template>
    <Table :columns="columns" :data="data">
        <template slot-scope="{ row, index }" slot="name">
            <Input type="text" v-model="editName" v-if="editIndex === index" />
            <span v-else>{{ row.name }}</span>
        </template>

        <template slot-scope="{ row, index }" slot="age">
            <Input type="text" v-model="editAge" v-if="editIndex === index" />
            <span v-else>{{ row.age }}</span>
        </template>

        <template slot-scope="{ row, index }" slot="birthday">
            <Input type="text" v-model="editBirthday" v-if="editIndex === index" />
            <span v-else>{{ getBirthday(row.birthday) }}</span>
        </template>

        <template slot-scope="{ row, index }" slot="address">
            <Input type="text" v-model="editAddress" v-if="editIndex === index" />
            <span v-else>{{ row.address }}</span>
        </template>

        <template slot-scope="{ row, index }" slot="action">
            <div v-if="editIndex === index">
                <Button @click="handleSave(index)">保存</Button>
                <Button @click="editIndex = -1">取消</Button>
            </div>
            <div v-else>
                <Button @click="handleEdit(row, index)">操作</Button>
            </div>
        </template>
    </Table>
</template>
<script>
    export default {
        data () {
            return {
                columns: [
                    {
                        title: \'姓名\',
                        slot: \'name\'
                    },
                    {
                        title: \'年龄\',
                        slot: \'age\'
                    },
                    {
                        title: \'出生日期\',
                        slot: \'birthday\'
                    },
                    {
                        title: \'地址\',
                        slot: \'address\'
                    },
                    {
                        title: \'操作\',
                        slot: \'action\'
                    }
                ],
                data: [
                    {
                        name: \'王小明\',
                        age: 18,
                        birthday: \'919526400000\',
                        address: \'北京市朝阳区芍药居\'
                    },
                    {
                        name: \'张小刚\',
                        age: 25,
                        birthday: \'696096000000\',
                        address: \'北京市海淀区西二旗\'
                    },
                    {
                        name: \'李小红\',
                        age: 30,
                        birthday: \'563472000000\',
                        address: \'北京市通州区永顺地区\'
                    },
                    {
                        name: \'周小伟\',
                        age: 26,
                        birthday: \'687024000000\',
                        address: \'深圳市南山区深南大道\'
                    }
                ],
                editIndex: -1,  // 当前聚焦的输入框的行数
                editName: \'\',  // 第一列输入框,当然聚焦的输入框的输入内容,与 data 分离避免重构的闪烁
                editAge: \'\',  // 第二列输入框
                editBirthday: \'\',  // 第三列输入框
                editAddress: \'\',  // 第四列输入框
            }
        },
        methods: {
            handleEdit (row, index) {
                this.editName = row.name;
                this.editAge = row.age;
                this.editAddress = row.address;
                this.editBirthday = row.birthday;
                this.editIndex = index;
            },
            handleSave (index) {
                this.data[index].name = this.editName;
                this.data[index].age = this.editAge;
                this.data[index].birthday = this.editBirthday;
                this.data[index].address = this.editAddress;
                this.editIndex = -1;
            },
            getBirthday (birthday) {
                const date = new Date(parseInt(birthday));
                const year = date.getFullYear();
                const month = date.getMonth() + 1;
                const day = date.getDate();
                return `${year}-${month}-${day}`;
            }
        }
    }
</script>

参考

https://run.iviewui.com/50ahQHrs

分类:

技术点:

相关文章:

  • 2021-04-07
  • 2022-12-23
  • 2021-09-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案