我的表中有日期列。它们以MMM YYYY
(例如JAN 2020
)格式呈现给用户。我希望用户能够根据这些月份和年份进行过滤 - 如果他们输入“Jan”,他们应该得到所有 1 月份的行,等等。多年来相同。
根据数据表的 Vuetify文档:
search
您可以通过向 prop 提供函数来覆盖与 prop 一起使用的默认过滤custom-filter
。如果您需要自定义特定列的过滤,您可以为filter
header items 上的属性提供一个函数。签名是(value: any, search: string | null, item: any) => boolean
。即使search
没有提供 prop,此函数也将始终运行。因此,您需要确保使用true
if 不应该应用过滤器的值提前退出。
我有几个标题,它们根据需要调用提供 filterDate 函数:
{
text: "Contract Delivery",
value: "contractDate",
align: "center",
sortable: true,
filter: this.filterDate
},
{
text: "Nominal Delivery",
value: "targetDeliveryDate",
align: "center",
sortable: true,
filter: this.filterDate
},
...以及函数本身:
const formatter = new Intl.DateTimeFormat("en-us", {
year: "numeric",
month: "short"
});
export default {
// ... other stuff redacted
methods: {
filterDate(dateString, search) {
// dateString is a string from the database, not a handy month and year
if (dateString == null || search == null || search == "") return true;
let month = "";
let year = "";
formatter
.formatToParts(new Date(dateString)) // make it a date and get the bits
.map(({ type, value }) => {
switch (type) {
case "month":
this.month = value.ToLowerCase();
break;
case "year":
this.year = value;
break;
});
return month.indexOf(search.toLowerCase()) !== -1 || year.indexOf(search) !== -1
});
}
}
}
...但这显然行不通-即使我制作了整个formatDate
just ,我也无法使其工作return true
。我不知所措。