Vuetify v-просмотр дерева получает узел, на который был сделан последний щелчок

#javascript #vue.js #vuejs2 #vuetify.js

#javascript #vue.js #vuejs2 #vuetify.js

Вопрос:

Какой самый простой способ получить (идентификатор) узла, на который только что нажали в a <v-treeview> ? Существует update:open событие, которое выдает массив всех открытых узлов. Я мог бы временно сохранить весь массив и сравнить новую версию со старой, чтобы увидеть, какой элемент был добавлен или удален. Но это кажется немного громоздким, не так ли? Я хочу использовать идентификатор узла для динамической перезагрузки дочерних элементов дочерних элементов узла из серверной части, чтобы у пользователя было ощущение, что данные уже находятся во внешнем интерфейсе. Может быть, можно выдать в update:open событии не весь массив, а только текущий узел, как-то так: @update:open="onExpand(item)" ? (Это выдает ошибку Property or method "item" is not defined .)

Комментарии:

1. включите код в <vtreeview>

Ответ №1:

Вы могли бы использовать VTreeView ‘s label slot, который передает item себя в свой слот реквизитов. В этом слоте вы могли бы отобразить a span с click помощью обработчика, который также включает элемент:

 <template>
  <v-treeview :items="items">
    <template #label="{ item }">
      <span @click="onItemClick(item)">{{item.name}}</span>
    </template>
  </v-treeview>
</template>

<script>
export default {
  methods: {
    onItemClick(item) {
      console.log(item.id)
    }
  }
}
</script>
  

Комментарии:

1. Поддержано, поскольку это хороший обходной путь. Но имейте в виду, что событие click будет запускаться только при нажатии на метку узла treeview, а не при нажатии на стрелки слева. codesandbox.io/s/crazy-morning-nqirn?file=/src/components /…

2. В итоге я использовал поддержку load-children.

Ответ №2:

Вы можете использовать update:active с return-object реквизитом. Он вернет полный объект вместо идентификатора узла.

https://vuetifyjs.com/en/api/v-treeview/#props