vue.js - 自定义 v-data-table 中的列排序顺序
问题描述
我有一个数组 auditResult(数据来自 response.data.data),其值类似于 -internalID -fieldName -OldValue -NewValue
我有一张桌子
<v-data-table :items="auditResults" :headers="headers" class="searchable sortable">
<template v-slot:items="props">
<td>{{ getCodeValue(props.item.codeid) }}</td>
<td>{{ props.item.fieldname }}</td>
<td>{{ props.item.oldvalue }}</td>
<td>{{ props.item.newvalue }}</td>
<td>{{ props.item.requestedwhen | formatDate }}</td>
<td>{{ props.item.changedappliedwhen | formatDate }}</td>
<td>{{ props.item.requestedby }}</td>
<td>{{ props.item.reasonforchange }}</td>
</template>
<template v-slot:no-results>
<v-alert :value="true" color="error" icon="warning">Found no results.</v-alert>
</template>
</v-data-table>
现在我有一个名为 getCodeValue 的方法,其中将 internalID 与 Code 进行比较以获取 Code Value 这里是代码:
getCodeValue(codeid) {
let codeFound = this.codeResults.find(m => m.internalid == codeid);
if (codeFound) {
this.auditResults.codeid = codeFound.code;
return this.auditResults.codeid;
}
return "Code not found";
}
现在我的问题是代码将被排序,表使用 internalID 对其进行排序。原因是表项是 auditResult。
我怎样才能实现表应该从 getCodeValue 方法排序代码,而不是从 auditResult 排序 internalID。
解决方案
您可以通过在标题定义中v-data-table
传递选项来提供自己的函数以用于比较行sort
在标题中:
headers: [
{
text: 'Code',
value: 'codeid',
sort: function(a, b) {
// implement custom compare function here
},
},
],
传递给的函数sort
应该实现与中使用的相同的“合同”Array.prototype.sort
- 如果项目相等则返回 0
- 如果 a < b (a 先出现),则返回 -1
- 如果 a > b 则返回 +1(b 先出现)
一些注意事项:
this.auditResults.codeid = codeFound.code;
-auditResults
是一个数组,因此您正在向数组实例添加新属性,而不是更改codeid
数组内对象中的值- 反正我不建议做这样的事情。每次重新渲染模板时都会为每一行调用您的函数,因此最终您将在每一行中得到“代码未找到”值
- 在从 API 接收数据后,您可能应该将新属性(通过您的函数查找的值)添加到数据对象中一次(注意 Vue 的变更检测警告),而不是每次都查找值。那么您将不需要任何自定义排序或自定义呈现逻辑......
推荐阅读
- python - 如何在 Python 中配置装饰器
- kotlin - 如何将数据从电脑上传到firestore。获取“无法检测我们是否在 Google Compute Engine 上运行。”
- r - 将颜色酿造器应用于 ggplot 中的单行
- r - R - 按组计算滞后变量
- api - ActiveMQ Artemis 使用 API 调用浏览方法
- html - 是否可以在 twig Symfony 4 中将 CSS 类添加到 form_row?
- excel - 重命名过滤器值
- python - 如何在熊猫数据框中删除具有特定名称的多行
- react-native - React-Native-Navigation (v2) 底部选项卡 onPress
- azure-devops - 如何在 Azure Devops 和 Microsoft Teams 之间共享成员资格?