如何显示非过滤元素的文本
How to display a text for non-filtered elements
我正在尝试创建如下所示的日历:
如您所见,我有门票对象,根据这些门票的日期,我正在显示它们。
我需要做什么,正如你在图片中看到的那样,我想在它为空时显示文本 'No available ticket' 。例如,对于星期一和星期二(实际上是除星期三之外的所有天)。所以要取票,我在过滤票:
findTickets(tickets, date) {
return tickets.filter((ticket) => {
return (
ticket.date.getDate() === date.getDate() &&
ticket.date.getMonth() === date.getMonth() &&
ticket.date.getFullYear() === date.getFullYear() &&
this.getWeekNumber(ticket.date) === this.currentWeekNumber
);
});
},
并且基本上用 v-for:
在 table 内显示
<tr class="list-content" v-for="ticket in findTickets(tickets, date)">
<td>{{ ticket.time }}</td>
<td>{{ ticket.date }}</td>
<td>{{ ticket.name }}</td>
</tr>
那你知道空票时怎么写'no available date'吗?
您可以尝试使用地图而不是过滤器,如下所示:
return tickets.map((ticket) => {
if (ticket.date.getDate() === date.getDate() &&
ticket.date.getMonth() === date.getMonth() &&
ticket.date.getFullYear() === date.getFullYear() &&
this.getWeekNumber(ticket.date) === this.currentWeekNumber) return ticket;
ticket = {time: '', date: 'No available ticket', name: ''}
return ticket
});
也许更好的方法是创建计算 属性...
您可以在 Javascript 代码中调用 findTickets()
并在 v-for
循环中直接使用列表,而不是直接在 HTML 中调用 findTickets()
.您可以使用 v-if
检查 tickets
数组是否为空,如果是,则打印一条消息。
<tr v-for="ticket in tickets" v-bind:key="ticket.name">
<td>{{ ticket.time }}</td>
<td>{{ ticket.date }}</td>
<td>{{ ticket.name }}</td>
</tr>
<div v-if="tickets.length == 0">No available tickets</div>
这是数据:
data: function () {
return {
tickets: [],
};
},
对于此示例,如果没有门票,findTickets()
方法应该 return 一个空数组。
methods: {
findTickets() {
// Here you do your stuff.
// Let's say you found your tickets
var ticketsFound = true;
if (ticketsFound) {
this.tickets = [
{
time: "11:02",
date: "23/85/2009",
name: "Ticket 1",
},
{
time: "11:02",
date: "23/85/2009",
name: "Ticket 2",
},
{
time: "11:02",
date: "23/85/2009",
name: "Ticket 3",
},
{
time: "11:02",
date: "23/85/2009",
name: "Ticket 4",
},
];
} else {
this.tickets = [];
}
},
}
然后你只需要在任何你喜欢的地方调用findTickets()
方法。在我的示例中,我在组件 mounted.
时调用它
mounted() {
this.findTickets();
},
我正在尝试创建如下所示的日历:
如您所见,我有门票对象,根据这些门票的日期,我正在显示它们。 我需要做什么,正如你在图片中看到的那样,我想在它为空时显示文本 'No available ticket' 。例如,对于星期一和星期二(实际上是除星期三之外的所有天)。所以要取票,我在过滤票:
findTickets(tickets, date) {
return tickets.filter((ticket) => {
return (
ticket.date.getDate() === date.getDate() &&
ticket.date.getMonth() === date.getMonth() &&
ticket.date.getFullYear() === date.getFullYear() &&
this.getWeekNumber(ticket.date) === this.currentWeekNumber
);
});
},
并且基本上用 v-for:
在 table 内显示<tr class="list-content" v-for="ticket in findTickets(tickets, date)">
<td>{{ ticket.time }}</td>
<td>{{ ticket.date }}</td>
<td>{{ ticket.name }}</td>
</tr>
那你知道空票时怎么写'no available date'吗?
您可以尝试使用地图而不是过滤器,如下所示:
return tickets.map((ticket) => {
if (ticket.date.getDate() === date.getDate() &&
ticket.date.getMonth() === date.getMonth() &&
ticket.date.getFullYear() === date.getFullYear() &&
this.getWeekNumber(ticket.date) === this.currentWeekNumber) return ticket;
ticket = {time: '', date: 'No available ticket', name: ''}
return ticket
});
也许更好的方法是创建计算 属性...
您可以在 Javascript 代码中调用 findTickets()
并在 v-for
循环中直接使用列表,而不是直接在 HTML 中调用 findTickets()
.您可以使用 v-if
检查 tickets
数组是否为空,如果是,则打印一条消息。
<tr v-for="ticket in tickets" v-bind:key="ticket.name">
<td>{{ ticket.time }}</td>
<td>{{ ticket.date }}</td>
<td>{{ ticket.name }}</td>
</tr>
<div v-if="tickets.length == 0">No available tickets</div>
这是数据:
data: function () {
return {
tickets: [],
};
},
对于此示例,如果没有门票,findTickets()
方法应该 return 一个空数组。
methods: {
findTickets() {
// Here you do your stuff.
// Let's say you found your tickets
var ticketsFound = true;
if (ticketsFound) {
this.tickets = [
{
time: "11:02",
date: "23/85/2009",
name: "Ticket 1",
},
{
time: "11:02",
date: "23/85/2009",
name: "Ticket 2",
},
{
time: "11:02",
date: "23/85/2009",
name: "Ticket 3",
},
{
time: "11:02",
date: "23/85/2009",
name: "Ticket 4",
},
];
} else {
this.tickets = [];
}
},
}
然后你只需要在任何你喜欢的地方调用findTickets()
方法。在我的示例中,我在组件 mounted.
mounted() {
this.findTickets();
},