iview的表格添加筛选功能需要注意的问题

table的某列添加筛选功能

table中通过给columns数据的项,设置 filters,可进行筛选,filters 接收一个数组。

然后再指定一个筛选函数 filterMethod 才可以进行筛选,filterMethod 传入两个参数valuerow

如果指定 filterMultiple: false,则只能单选,默认为多选。

注意,筛选并不会影响到表格的源数据 data

基础示例

<template>
    <Table border :columns="columns" :data="data"></Table>
</template>
<script>
    export default {
        data () {
            return {
                columns: [
                    {
                        title: '名称',
                        key: 'name'
                    },
                    {
                        title: '年龄',
                        key: 'age',
                        filters: [
                            {
                                label: '大于25',
                                value: 1
                            },
                            {
                                label: '小于25',
                                value: 2
                            }
                        ],
                        filterMultiple: false,
                        filterMethod (value, row) {
                            if (value === 1) {
                                return row.age > 25;
                            } else if (value === 2) {
                                return row.age < 25;
                            }
                        }
                    },
                    {
                        title: '地址',
                        key: 'address',
                        filters: [
                            {
                                label: '北京',
                                value: '北京'
                            },
                            {
                                label: '上海',
                                value: '上海'
                            },
                            {
                                label: '四川',
                                value: '四川'
                            }
                        ],
                        filterMethod (value, row) {
                            return row.address.indexOf(value) > -1;
                        }
                    }
                ],
                data: [
                    {
                        name: '张三',
                        age: 10,
                        address: '四川',
                    },
                    {
                        name: '李四',
                        age: 25,
                        address: '上海',
                    },
                    {
                        name: '王五',
                        age: 35,
                        address: '北京',
                    },
                    {
                        name: '秀豆',
                        age: 27,
                        address: '四川',
                    }
                ],
            }
        }
    }
</script>

在这里插入图片描述

特殊情况改造

filters中的数据需要动态获取

filters中的内容需要从后端接口中获取,如果我们直接把从接口中获取到的数据赋值给filters的话,筛选不会生效。
错误示例

{
    title: '年龄',
    key: 'age',
    filters: this.filters, // 从接口返回的数据
    filterMultiple: false,
    filterMethod (value, row) {
        // ...
    }
},

正确示例

// 伪代码
const res = await this.$axois(...); // 获取对应接口数据
this.filters = res;
this.columns[1].filters = this.filters; // 当前把需要的数据赋值给columns

filters中的数据过多,导致超出了屏幕内容以外的区域

请添加图片描述
这种情况怎么办?可以会想没法用了,得自己重新写个了,但转念一想,这是css样式问题,我们可以检查对应元素,通过javascript拿到指定元素,然后去修改元素的相关样式啊。
解决方法

// 接上面的示例,当filters中的数据从接口中获取到后,我们`f12`拿到指定元素,修改它的高度等属性即可。
this.$nextTick(() => {
  if (this.filters.length) {
    let listDom = document.querySelector(".main-ui-table-filter-list-item");
    listDom.style.height = "400px";
    listDom.style.overflow = "auto";
  }
})

修改后的样式就没撒问题了在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iview 表格中上传图片功能可以通过使用 i-upload 组件来实现。你可以在表格的列定义中添加一个自定义的渲染函数,该函数返回 i-upload 组件。例如: ```html <template> <Table :columns="columns" :data="tableData"></Table> </template> <script> export default { data() { return { tableData: [ { name: 'John', age: 30, avatar: '', }, { name: 'Jane', age: 25, avatar: '', }, ], columns: [ { title: 'Name', key: 'name', }, { title: 'Age', key: 'age', }, { title: 'Avatar', key: 'avatar', render: (h, params) => { return h('i-upload', { props: { action: 'your_upload_api_url', showUploadList: false, headers: { Authorization: 'Bearer ' + localStorage.getItem('token'), }, }, on: { 'on-success': response => { // 上传成功后,将图片地址保存到表格数据中 this.tableData[params.index].avatar = response.data.url; }, }, }, [ h('Button', { props: { type: 'primary', }, }, 'Upload Image'), ]); }, }, ], }; }, }; </script> ``` 在这个例子中,我们在列定义中添加了一个名为 avatar 的列,该列的渲染函数返回了一个 i-upload 组件,用于在表格中上传图片。我们指定了上传图片的 API 地址、请求头以及一些其他属性,如 showUploadList 用于控制上传成功后是否显示上传列表。当上传成功后,我们将图片地址保存到相应的表格数据中。 注意:这里的上传地址和请求头需要根据你的实际情况进行修改。同时,i-upload 组件需要在你的组件中进行引入,例如: ```js import { Upload } from 'iview'; ``` 希望这个例子对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值