styling individual rows in a Vuetify data table

后端 未结 4 2278
没有蜡笔的小新
没有蜡笔的小新 2021-02-14 04:36

Can I apply different styling for a specific row in a data table?

This is my code:



        
相关标签:
4条回答
  • 2021-02-14 05:03

    You can actually wrap your <td> elements within a <tr> element. Then you can use Vue style binding to determine whether you want classes applied or not.

    <template>
      <tr v-bind:class="{'active-class-name': isActive(item)}">
        <td>Woo</td>
      </tr>
    </template>
    

    It renders out the tbody block with a row (tr) with applied class names and the child columns contained within.

    0 讨论(0)
  • 2021-02-14 05:08

    here is a codepen that produces a similar result to what you're looking for. It uses the style binding syntax referenced by Daniel's comment above.

    https://codepen.io/lshapz/pen/jxmgyx

    If you want the whole row to have a red line (or in my example a red background), you'll need to wrap the three td in a tr. If you just want it on the id cell, then you can add

    <td class="text-xs-left" :style="{backgroundColor: (props.item.id > 4 ? 'red' : 'transparent' ) }">
     {{ props.item.id }}
    </td>
    
    0 讨论(0)
  • 2021-02-14 05:19

    I was also trying to style rows in a vuetify data-table but the above answers didn't have everything I needed to make it work. Using Vuetify v2

    I wanted to add a class to a row when a certain condition was met.

    <v-data-table  
       :headers="myHeaders"
       :items="myItems"
    >
      <template v-slot:item="props">
        <tr :class="{'my-class': props.item.current > props.item.total}">
          <td>{{props.item.current}}</td>
          <td>{{props.item.total}}</td>
        </tr>
      </template>
    </v-data-table>
    

    ...
    // js portion of the component (computed prop)
    
    myItems() {
        return [
          {
            current: 101,
            total: 100
          },
          {
            current: 45,
            total: 100
          }
        ]
      }
    
    0 讨论(0)
  • 2021-02-14 05:20

    You can now use vuetifys data table item-class property:

    new Vue({
      el: '#app',
      vuetify: new Vuetify(),
      methods: {
        row_classes(item) {
            if (item.calories < 200) {
              return "orange"; //can also return multiple classes e.g ["orange","disabled"]
            } 
        }
      },
      data () {
        return {
          singleSelect: false,
          selected: [],
          headers: [{text: 'Dessert (100g serving)', value: 'name'},
                    { text: 'Calories', value: 'calories' },
          ],
          desserts: [{name: 'Frozen Yogurt',calories: 159,},
                     {name: 'Ice cream sandwich',calories: 237,},
                     {name: 'Eclair',calories: 262,},
                     {name: 'Cupcake',calories: 305,},
          ],
        }
      },
    })
    .orange {
      background-color: orange;
    }
    <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/vuetify@2.3.4/dist/vuetify.min.css'>
    
    <div id="app">
      <v-app>
        <v-data-table
          v-model="selected"
          :headers="headers"
          :items="desserts"
          :item-class= "row_classes"                  
          class="elevation-1"
        >
        </v-data-table>
      </v-app>
    </div>
    
    <script src='https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js'></script>
    <script src='https://cdn.jsdelivr.net/npm/vuetify@2.3.4/dist/vuetify.min.js'></script>

    0 讨论(0)
提交回复
热议问题