Can I use the 'index' argument in 'v-for' nested in a 'method'?

≯℡__Kan透↙ 提交于 2020-01-06 04:37:29

问题


I need to use index on a v-for but on the same level as the directive itself in order to mutate the state being shown.

<template>
  <div>
    <div v-for="share in sharesPurchased()" :key="share">
      <div>
        <h4>This is some content</h4>
        <p style="border: solid 1px">{{share.count}}</p>
      </div>
    </div>
  </div>
</template>

<script>

  export default {
    data(){
      return {
        shares: [
          {id: 'BMW', count: 1},
          {id: 'Ford', count: 0},
          {id:'Apple', count: 10}
        ]
      }
    },
    methods: {
      sharesPurchased() {
// I want to use this at the v-for level to limit content view
      }
    }
  }
</script>

I want to limit what is being displayed in this iteration so I only show content with a count > 0 i.e: shares[i].count > 0

The result of my intent as per stated above should have <p style="border: solid 1px">{{share.count}}</p> displaying just 1 as only this.shares[0].count is > then 0


回答1:


Update: based on your need to use it, this is clearly an X-Y problem. You should be using computed properties instead:

computed: {
    filteredSharesByCount: function() {
        return this.shares.filter(share => share.count > 0);
    }
}

You can then reference it as such in your template:


Outdated answer:

The index is accessible as the second optional argument in the v-for binding:

v-for also supports an optional second argument for the index of the current item.

ie:

<div v-for="(share, idx) in sharesPurchased(shares)" :key="share">

Then, within the loop you can simply use idx if you want a method to have access to the index.



来源:https://stackoverflow.com/questions/59472978/can-i-use-the-index-argument-in-v-for-nested-in-a-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!