как сделать щелчок по пункту меню в Vuetify?
Я создал меню при наведении аватара, а также добавил элемент из массива элементов. Теперь, щелкая по элементам, нужно перейти к определенному компоненту или элементу. Я пробовал это:
шаблон:
<template>
<div>
<v-menu offset-y open-on-hover>
<template v-slot:activator="{ on }">
<v-avatar color="white" size="38" v-on="on">
<span class="primary--text headline">A</span>
</v-avatar>
</template>
<v-list>
<v-list-item
v-for="(item, index) in items"
:key="index"
@click="selectSection(item)" >
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</div>
</template>
Сценарий:
<script>
export default {
data: () => ({
items: [
{ title: 'abcd.xyz@example.com' },
{ title: 'Profile' },
{ title: 'Logout' },
],
}),
methods: {
selectSection(item) {
this.selectedSection = item;
}
}
</script>
1 ответ
Решение
Используйте switch-case в своих элементах следующим образом:
selectSection(item) {
switch (item.title) {
case 'abcd.xyz@example.com':
console.log('email')
break
case 'Profile':
console.log('Profile')
break
case 'Logout':
console.log('Logout')
}
}
и вместо console.log()
s используйте ваш код, например, чтобы перейти на страницу профиля вместо console.log('Profile')
ставить $router.push('/profile')
надеюсь, это поможет тебе
Если вы хотите сохранить логику кликов вместе с данными об элементе, вы можете сделать это следующим образом. Причина, по которой я использую
call
это то, что у нас есть доступ к
this
(чтобы мы могли получить доступ к экземпляру Vue и хранилищу Vuex и т. д.):
Шаблон:
<template>
<v-menu bottom left>
<template v-slot:activator="{ on, attrs }">
<v-btn
v-bind="attrs"
v-on="on"
color="primary"
icon
>
<v-icon>mdi-dots-vertical</v-icon>
</v-btn>
</template>
<v-list>
<v-list-item
v-for="(item, index) in items"
:key="index"
@click="handleClick(index)"
>
<v-list-item-icon>
<v-icon v-text="item.icon"></v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</template>
Сценарий:
<script>
export default {
data: () => ({
items: [
{
title: 'Edit',
icon: 'mdi-pencil',
click() {
console.log('edit')
}
},
{
title: 'Due Date',
icon: 'mdi-calendar',
click() {
console.log('due date')
}
},
{
title: 'Delete',
icon: 'mdi-delete',
click() {
this.$store.dispatch('deleteTask', 1)
}
}
]
}),
methods: {
handleClick(index) {
this.items[index].click.call(this)
}
}
}
</script>