gpt4 book ai didi

vue.js - 按显示的文本(不是模型)对 Vuetify 表进行排序

转载 作者:行者123 更新时间:2023-12-03 06:48:57 26 4
gpt4 key购买 nike

Vuetify.js 数据表组件内置排序,但它根据模型中的数据而不是显示给客户端的文本进行排序。

在下面的示例中,“age”的原始值(例如“EIGHTEEN_TO_TWENTY”)被转换为更易读的格式(例如“18-20”)。但是由于 Vuetify 是按模型排序的,所以它会排序 8 < FIFTEEN < TWENTYONE 而不是 15 < 18 < 21。有没有办法按计算/显示的值排序?

Vue.use(Vuetify);
vue = new Vue({
el: '#main',
data: {
members: [{name: 'Bob', age: 'FIFTEEN_TO_SEVENTEEN', id: 1},
{name: 'Sue', age: 'EIGHTEEN_TO_TWENTY', id: 2},
{name: 'Bill', age: 'TWENTYONE_TO_TWENTYFOUR', id: 3}],
ageLabels: {FIFTEEN_TO_SEVENTEEN : '15-17',
EIGHTEEN_TO_TWENTY : '18-20',
TWENTYONE_TO_TWENTYFOUR : '21-24'},
tableFields: [{value: 'name', text: 'Name'},
{value: 'age', text: 'Age'},
{value: 'id', text: 'ID'}]
}
});
<!DOCTYPE html>
<html lang="en">
<head>
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify/dist/vuetify.min.css" rel="stylesheet">
</head>
<body>
<div id=main>
<v-data-table :headers="tableFields" :items="members" data-app>
<template v-slot:items="props">
<td>{{ props.item.name }}</td>
<td>{{ ageLabels[props.item.age] }}</td>
<td>{{ props.item.id }}</td>
</template>
</v-data-table>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.8/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify/dist/vuetify.js"></script>
</body>

最佳答案

您可以根据需要使用 Vue 的计算属性功能来更改默认数据模型。

为此,模板的更改将是:

<div id="main">
<v-data-table :headers="tableFields" :items="formatMembers" disable-initial-sort data-app>
<template v-slot:items="props">
<td>{{ props.item.name }}</td>
<td>{{ props.item.age }}</td>
<td>{{ props.item.id }}</td>
</template>
</v-data-table>
</div>

在这里,我将 :items 绑定(bind)到计算属性“formatMembers”而不是数据中的原始“成员”。我添加了一个新的“禁用初始排序”属性来禁用 vuetify 的默认初始排序,该排序按第一列对表进行排序(在您的情况下,它是名称列)。

然后在脚本中,使用这样的计算属性:
<script>
Vue.use(Vuetify);
let vue = new Vue({
el: "#main",
data: {
members: [{
name: "Bob",
age: "FIFTEEN_TO_SEVENTEEN",
id: 1
}, {
name: "Sue",
age: "EIGHTEEN_TO_TWENTY",
id: 2
}, {
name: "Bill",
age: "TWENTYONE_TO_TWENTYFOUR",
id: 3
}],
ageLabels: {
FIFTEEN_TO_SEVENTEEN: "15-17",
EIGHTEEN_TO_TWENTY: "18-20",
TWENTYONE_TO_TWENTYFOUR: "21-24"
},
tableFields: [{
value: "name",
text: "Name"
}, {
value: "age",
text: "Age"
}, {
value: "id",
text: "ID"
}]
},
computed: {
formatMembers() {
let newMembers = this.members.slice();
newMembers.map((el, id) => (el.age = this.ageLabels[el.age]));
return newMembers;
}
}
});
</script>

这是工作 codesandbox关联

关于vue.js - 按显示的文本(不是模型)对 Vuetify 表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55231188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com