在Vuetify数据表中仅显示悬停的<v-icon>

时间:2019-09-13 16:35:09

标签: javascript css vue.js vuejs2 vuetify.js

我有一个分别带有标题和数据字段的Vuetify数据表,并且在props.item.name中我添加了一个v-icon,但是我只想将鼠标悬停在相应字段上时才显示该图标。默认情况下,它不会显示。

我在下面的代码中添加了脚本和HTML。

这是一个pen

任何帮助将不胜感激。

new Vue({
  el: '#app',
  data() {
    return {
      headers: [{
          text: 'Dessert (100g serving)',
          align: 'left',
          sortable: false,
          value: 'name'
        },
        {
          text: 'Calories',
          value: 'calories'
        },
        {
          text: 'Fat (g)',
          value: 'fat'
        },
        {
          text: 'Carbs (g)',
          value: 'carbs'
        },
        {
          text: 'Protein (g)',
          value: 'protein'
        },
        {
          text: 'Iron (%)',
          value: 'iron'
        }
      ],
      desserts: [{
          name: 'Frozen Yogurt',
          calories: 159,
          fat: 6.0,
          carbs: 24,
          protein: 4.0,
          iron: '1%'
        },
        {
          name: 'Ice cream sandwich',
          calories: 237,
          fat: 9.0,
          carbs: 37,
          protein: 4.3,
          iron: '1%'
        },
        {
          name: 'Eclair',
          calories: 262,
          fat: 16.0,
          carbs: 23,
          protein: 6.0,
          iron: '7%'
        },
        {
          name: 'Cupcake',
          calories: 305,
          fat: 3.7,
          carbs: 67,
          protein: 4.3,
          iron: '8%'
        },
      ]
    }
  }
})
<link href="https://cdn.jsdelivr.net/npm/vuetify@1.5.18/dist/vuetify.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/vuetify@1.5.18/dist/vuetify.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/babel-polyfill/dist/polyfill.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <v-app id="inspire">
    <v-data-table :headers="headers" :items="desserts" class="elevation-1">
      <template v-slot:items="props">
        <td>{{ props.item.name }}
        <v-icon right>cake</v-icon></td>
        <td>{{ props.item.calories }}</td>
        <td>{{ props.item.fat }}</td>
        <td>{{ props.item.carbs }}</td>
        <td>{{ props.item.protein }}</td>
        <td>{{ props.item.iron }}</td>
      </template>
    </v-data-table>
  </v-app>
</div>

3 个答案:

答案 0 :(得分:3)

添加一个数据属性,例如c_index(当前索引),当您将鼠标悬停在行上时,将悬停的索引分配给c_index,并在鼠标离开时将其重置为-1:

  <tr @mouseover="c_index=props.index" @mouseleave="c_index=-1">

并有条件地显示该图标:

  <v-icon right v-show="props.index==c_index">cake</v-icon>

Full Demo

答案 1 :(得分:1)

在数据表v-hover内使用v-slot:item.column_name组件,您可以将道具通过其v-slot,并按如下方式使用它:

<template v-slot:item.action="{ item }">
    <v-hover v-slot:default="{ hover }">
        <v-badge
          :value="hover"          
          color="deep-purple accent-4"
          content="First Button"
          left
          transition="slide-x-transition"
         >
             <v-icon>mdi-fountain-pen-tip</v-icon>
         </v-badge>
    </v-hover>
</template>

此外,您还可以将v-hover与css一起使用,但必须固定位置。 Full Demo

答案 2 :(得分:0)

您最好的选择是CSS

_在v-icon悬停时:

.v-data-table .v-icon{visibility:hidden}
.v-data-table .v-icon:hover{visibility:visible}

_在td容器上悬停

.v-data-table td .v-icon{visibility:hidden}
.v-data-table td:hover .v-icon:hover{visibility:visible}

这将影响模板中的所有v-icon,更准确地说,将类添加到要隐藏的v-icon s中。

...
<v-icon class="hidden" ... />
...

.hidden{visibility:hidden}
.hidden:hover{visibility:visible}

...
<td class="hidden" >
     <v-icon ...>
...
</td>
...

.hidden .v-icon{visibility:hidden}
.hidden:hover .v-icon{visibility:visible}