How to get the v-for index in Vue.js?

I have a Vue component like bellow:

<div v-for="item in items" :key="there I want get the for-loop index"  >

</div>

... 

data(){
  items: [{name:'a'}, {name:'b'}...]
}

How can I get the index when I execute the for-loop in my vue.js?


Solution 1:

Declare an index variable:

<div v-for="(item, index) in items" :key="item.name">

</div>

Demo:

new Vue({
  el: '#app',
  data: {
    items: [{name: 'a'}, {name: 'b'}]
  }
})
<script src="https://unpkg.com/vue"></script>

<div id="app">
  <div v-for="(item, index) in items" :key="item.name">
    {{ index }}: {{ item.name }}
  </div>
</div>

Official docs section - Mapping an Array to Elements with v-for (emphasis mine):

Inside v-for blocks we have full access to parent scope properties. v-for also supports an optional second argument for the index of the current item.

Solution 2:

You can use `$index` to get the index of v-for.

<div v-for="item in items" :key="`$index`"  >

</div>

and the other method:

<div v-for="(item, index) in items" :key="index"  >

</div>

Solution 3:

Create a new method:

methods: {
    incrementIndex(key) {
        return key + 1;
    },
},

If the array keys are numbered, starting with zero like items[0], items[1], etc.., you can use the array's keys:

<div v-for="(item, key) in items" :key="key">
    {{ incrementIndex(key) }}
</div>

But if the array's keys are typeof String then you can do:

<div v-for="(item, key, index) in items" :key="key">
    {{ incrementIndex(index) }}
</div>

The second version uses the counter from the v-for loop.