uni-app 表头排序类似datagrid的插件

uni-app 表头排序类似datagrid的插件

无相关信息

1 回复

更多关于uni-app 表头排序类似datagrid的插件的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中实现类似 datagrid 的表头排序功能,你可以使用 uView UI 框架中的 u-table 组件,它提供了较为完善的表格功能,包括表头排序。如果你不想使用第三方框架,也可以自己实现一个简单的排序功能。下面是一个使用原生 uni-app 实现的示例代码。

1. 创建数据模型

首先,定义你的数据模型和一个初始数据数组:

data() {
    return {
        columns: [
            { key: 'name', label: 'Name', sortable: true },
            { key: 'age', label: 'Age', sortable: true },
            { key: 'address', label: 'Address', sortable: false }
        ],
        data: [
            { name: 'John', age: 25, address: 'New York' },
            { name: 'Jane', age: 30, address: 'London' },
            { name: 'Mike', age: 22, address: 'Chicago' }
        ],
        sortKey: '',
        sortOrder: 'asc'
    };
}

2. 创建表格组件

在模板中,创建一个简单的表格组件,并为表头添加点击事件以实现排序:

<template>
    <view>
        <view class="table-header">
            <view 
                v-for="column in columns" 
                :key="column.key" 
                class="table-header-cell" 
                @click="onHeaderClick(column.key)"
            >
                {{ column.label }}
                <text v-if="column.sortable && sortKey === column.key">
                    {{ sortOrder === 'asc' ? '↑' : '↓' }}
                </text>
            </view>
        </view>
        <view class="table-body">
            <view v-for="(row, index) in sortedData" :key="index" class="table-row">
                <view v-for="column in columns" :key="column.key" class="table-cell">
                    {{ row[column.key] }}
                </view>
            </view>
        </view>
    </view>
</template>

3. 实现排序逻辑

在方法中添加排序逻辑:

methods: {
    onHeaderClick(key) {
        if (this.sortKey === key) {
            this.sortOrder = this.sortOrder === 'asc' ? 'desc' : 'asc';
        } else {
            this.sortKey = key;
            this.sortOrder = 'asc';
        }
    },
    getSortedData() {
        if (!this.sortKey) return this.data;
        return this.data.slice().sort((a, b) => {
            let modifier = this.sortOrder === 'asc' ? 1 : -1;
            if (a[this.sortKey] < b[this.sortKey]) return -1 * modifier;
            if (a[this.sortKey] > b[this.sortKey]) return 1 * modifier;
            return 0;
        });
    },
    computed: {
        sortedData() {
            return this.getSortedData();
        }
    }
}

4. 样式

添加一些基本的样式来美化表格:

<style scoped>
.table-header {
    display: flex;
    background-color: #f5f5f5;
}
.table-header-cell {
    flex: 1;
    padding: 10px;
    text-align: left;
    cursor: pointer;
}
.table-body {
    margin-top: 10px;
}
.table-row {
    display: flex;
    border-bottom: 1px solid #ddd;
}
.table-cell {
    flex: 1;
    padding: 10px;
}
</style>

这个示例展示了如何在 uni-app 中实现一个简单的表头排序功能,你可以根据需求进行扩展和优化。

回到顶部