Создайте вычисляемое свойство filteredProjects
и поле данных event
. Используйте filteredProjects
в своем v-for для отображения проектов, в нем будут содержаться все проекты, отфильтрованные с помощью переменной event
.
Кроме того, вам, вероятно, следует присвоить полю данных event
значение в mounted()
или created()
, чтобы оно содержало ненулевое значение при инициализации компонента. Я добавил пустую проверку для этого в filteredProjects
.
export default {
name: 'allevents',
components: {},
data: () => ({
date: new Date().toISOString().substr(0, 10),
menu2: true,
project: [
{ cate: 'Technical', title: 'Top 10 Australian beaches', date: '2019-10-25', name: 'Whitehaven Beach', place: 'Whitsunday Island, Whitsunday Islands', sorce: 'https://cdn.vuetifyjs.com/images/cards/docks.jpg'},
{ cate: 'Sports', title: 'Top 10 Australian beaches', date: '2019-11-5', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/house.jpg'},
{ cate: 'Music', title: 'Top 10 Australian beaches', date: '2020-01-7', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/road.jpg'},
{ cate: 'Creative', title: 'Top 10 Australian beaches', date: '2019-11-3', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/plane.jpg'},
{ cate: 'Sports', title: 'Top 10 Australian beaches', date: '2019-10-20', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/house.jpg'},
{ cate: 'Music', title: 'Top 10 Australian beaches', date: '2019-11-5', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/road.jpg'},
{ cate: 'Adventure', title: 'Top 10 Australian beaches', date: '2019-12-14', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/plane.jpg'},
{ cate: 'Sports', title: 'Top 10 Australian beaches', date: '2020-03-12', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/house.jpg'},
{ cate: 'Music', title: 'Top 10 Australian beaches', date: '2019-11-9', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/road.jpg'},
{ cate: 'Adventure', title: 'Top 10 Australian beaches', date: '2019-10-26', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/plane.jpg'},
{ cate: 'Sports', title: 'Top 10 Australian beaches', date: '2019-09-21', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/house.jpg'},
{ cate: 'Music', title: 'Top 10 Australian beaches', date: '2019-08-15', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/road.jpg'},
{ cate: 'Creative', title: 'Top 10 Australian beaches', date: '2019-11-11', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/plane.jpg'},
{ cate: 'Sports', title: 'Top 10 Australian beaches', date: '2019-11-17', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/house.jpg'},
{ cate: 'Music', title: 'Top 10 Australian beaches', date: '2019-12-04', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/road.jpg'},
{ cate: 'Creative', title: 'Top 10 Australian beaches', date: '2020-05-05', name: 'Whitehaven Beach', place: 'Block 14, Near Tuck Shop', sorce: 'https://cdn.vuetifyjs.com/images/cards/plane.jpg'},
],
event: null,
clicked: false
}),
computed:
{
filteredProjects()
{
if(this.event != null && this.event.target.innerText.toLowerCase() != 'all')
{
return this.projects.filter(({cate})=>cate.toLowerCase() == this.event.target.innerText.toLowerCase());
}
else
{
return this.projects;
}
}
},
methods:
{
filter(event)
{
this.event = event;
}
}
}
PS: я не понял, почему у вас было две отдельные функции данных, поэтому я объединил их в одну. :)
РЕДАКТИРОВАТЬ: Посмотрите на вычисленные свойства здесь . Короче говоря, они ведут себя так же, как и обычные свойства (те, которые вы определяете в data
), но их значения вычисляются функцией и обновляются при изменении любой их зависимости. Например:
data: () => ({
a: 4,
}),
computed:
{
b()
{
return this.a * 2;
}
},
methods:
{
print()
{
console.log(this.b);
}
}
Значение this.b
будет обновляться при изменении a
.
Если вы позвоните print()
, будет выведено 8.
Есливы устанавливаете a
на 6, и вы звоните print()
, это выдает 12.
Также имейте в виду, что вы не можете сделать this.b = 14
. Вычисленные свойства доступны только для чтения.