#vue.js #vuetify.js
#vue.js #vuetify.js
Вопрос:
Я пытаюсь создать пользовательское контекстное меню, которое появляется при щелчке правой кнопкой мыши по строке в компоненте v-data-table.
как я могу этого добиться?
Комментарии:
1. пожалуйста, поделитесь некоторым кодом и тем, что вы уже пробовали
2. это не ошибка, просто функция vuetify, которую я не знаю, как реализовать.. Я пытаюсь запустить событие contextmenu в каждой строке v-data-table и не знаю как .. документация не содержит такой вещи, и я не хочу использовать v-slot для всей строки, потому что у меня уже есть несколько настроенных полей, и я не хочу настраивать записи всей строки..
3. чего вы хотите от этого события?
4. просто чтобы показать пользовательское contextmenu , набор действий, которые будут применены к некоторой выбранной строке в таблице, я хочу взять данные из самой компонентной модели vue
5. но вы должны использовать пользовательский рендеринг строк со слотами и запускать это событие в каждой строке
Ответ №1:
Для этого есть 2 способа.
Используя обычные строки v-data-table
Просто добавьте contextmenu:row
событие прослушивания v-data-table
компонента и наслаждайтесь волшебством каждой строки, вызывающей это событие при щелчке правой кнопкой мыши. Запишите это событие и обработайте его в JS.
<v-data-table :items="myItems"
:headers="headers"
@contextmenu:row="rightClickHandler"
...
/>
Затем вы делаете все, что хотите, с событием и элементом, генерирующим это событие
methods: {
rightClickHandler(event, item) {
// do something with event and/or item
console.log(event, item)
}
}
ПРИМЕЧАНИЕ: не будет генерироваться, когда строки таблицы определены через слот, такой как item или body.
Использование таблицы с item
/ body
слотами
При использовании слотов для создания cutom собственных строк таблицы вам нужно будет вручную запускать событие для каждой строки самостоятельно
<v-data-table
:headers="headers"
:items="myItems"
...
<template v-slot:body="{ items }">
<tbody>
<tr v-for="(item, index) in items"
:key="item.id"
@contextmenu="rightClick($event, item)"
...
И на стороне сценария просто реализуйте функцию для обработки события и элемента, на который нажимается
methods: {
rightClick(event, item) {
console.log(item)
event.preventDefault()
},