Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add class based on condition (for last rendered element with v-for)

I'm making a table in Vue.js and rendering some of the columns with the v-for directive:

<td v-for="(item, index) in items"> {{ item.name }} </td>

There is an unknown element count and I have to add a class to the last rendered element. I cannot use :last-child or :last-of-type because it is not the last <td> element in a row, it is just the last rendered element with v-for but there are also following <td> elements.

How could we achieve this in Vue.js?

like image 670
Incredible Avatar asked Dec 11 '22 09:12

Incredible


1 Answers

You have to use v-bind:class directive.

<td v-for="(item, index) in items"
    v-bind:class="{ active: index==items.length-1 }"> {{ item.name }} </td>

CSS class:

.active {
   //some style
}

The solution is checking if index of an element is equal to items.length-1

v-bind:class="{ active: index==items.length-1 }"

Working example:

new Vue({
  el: '#app',
  data: {
    items:[{"name":"A"},{"name":"B"},{"name":"C"}]
  }
})
.active {
  color: red;
}
<script src="https://unpkg.com/vue"></script>

<div id="app">
  <table>
    <tr>
      <td v-for="(item, index) in items"
          v-bind:class="{ active: index==items.length-1 }"> {{ item.name }} </td>
    </tr>
  </table>
</div>
like image 188
Mihai Alexandru-Ionut Avatar answered Feb 12 '23 11:02

Mihai Alexandru-Ionut