Откройте раскрывающийся список, щелкнув правой кнопкой мыши в Vue3 и Vuetify3.

Я пытаюсь работать с контекстным меню для Vue3. Я хочу показать список элементов под v-menu, щелкнув правой кнопкой мыши кнопку раскрывающегося списка. Я работаю над этой ссылкой в качестве ссылки, но когда я попытался сделать то же самое в своем файле Vue3, это дает мне такую ​​​​ошибку:

Может ли кто-нибудь предложить, что я делаю неправильно? Вот код-

<v-menu offset-y>
  <template v-slot:activator = "{ props }">
    <v-btn
      color = "primary"
      dark
      v-bind = "props"
      @contextmenu.prevent = "props.click"
      >
      Dropdown
    </v-btn>
  </template>
  <v-list>
    <v-list-item
      v-for = "(item, index) in menuClick"
      :key = "index"
      @click = ""
      >
      <v-list-item-title>{{ item.title }}</v-list-item-title>
    </v-list-item>
  </v-list>
</v-menu>
Конечные и Readonly классы в PHP
Конечные и Readonly классы в PHP
В прошлом, когда вы не хотели, чтобы другие классы расширяли определенный класс, вы могли пометить его как final.
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
БЭМ: Конвенция об именовании CSS
БЭМ: Конвенция об именовании CSS
Я часто вижу беспорядочный код CSS, особенно если проект большой. Кроме того, я совершал эту ошибку в профессиональных или личных проектах и...
Революционная веб-разработка ServiceNow
Революционная веб-разработка ServiceNow
В быстро развивающемся мире веб-разработки ServiceNow для достижения успеха крайне важно оставаться на вершине последних тенденций и технологий. По...
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Заголовок веб-страницы играет наиболее важную роль в SEO, он помогает поисковой системе понять, о чем ваш сайт.
Конфигурация Jest в angular
Конфигурация Jest в angular
В этой статье я рассказываю обо всех необходимых шагах, которые нужно выполнить при настройке jest в angular.
0
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не смог обнаружить ни одного события context menu в документе Vue3 и API меню Vuetify. Хотя у меня есть альтернатива, которая может выполнить эту работу. Вы можете использовать синхронизацию модификатора .right с v-model, чтобы открыть меню правым щелчком кнопки.

Вот стратегия-

  1. Используйте v-model для управления статусом переключения v-menu.
  2. Щелкнув правой кнопкой мыши, установите для v-model значение true, чтобы меню было открыто.
  3. При щелчке левой кнопкой мыши (по умолчанию) установите для v-model значение false. (Выполняйте этот шаг, только если вы не хотите открывать меню по щелчку по умолчанию.)

Вот работающая демо-

const { createApp } = Vue
const { createVuetify } = Vuetify

const vuetify = createVuetify()

const app = createApp({
  data: () => ({
    menu: false,
    items: [
      { title: 'Click Me' },
      { title: 'Click Me' },
      { title: 'Click Me' },
      { title: 'Click Me 2' },
    ],
  }),
}).use(vuetify).mount('#app')
<script src = "https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src = "https://cdn.jsdelivr.net/npm/vuetify@3.1.2/dist/vuetify.min.js"></script>
<link rel = "stylesheet" href = "https://cdn.jsdelivr.net/npm/vuetify@3.1.2/dist/vuetify.min.css">
<div id = "app">
  <v-app>
    <div class = "d-flex justify-space-around mb-5 font-weight-bold">
      I will open only with the right-click.
    </div>
    <div class = "d-flex justify-space-around">
      <v-menu v-model = "menu">
        <template v-slot:activator = "{ props }">
          <v-btn
            color = "primary"
            v-bind = "props"
            @click.left.prevent = "menu = false"
            @click.right.prevent = "menu = true"
            >
            Dropdown
          </v-btn>
        </template>
        <v-list>
          <v-list-item
            v-for = "(item, index) in items"
            :key = "index"
            :value = "index"
            >
            <v-list-item-title>{{ item.title }}</v-list-item-title>
          </v-list-item>
        </v-list>
      </v-menu>
    </div>
  </v-app>
</div>

Спасибо. Это сработало прекрасно. Надеюсь, что контекстное меню скоро будет реализовано в vue3.

Albert Ruelan 20.02.2023 02:11

Другие вопросы по теме