javascript 是否可以在v-for循环中使.slice()中的参数动态化?

rjee0c15  于 2022-12-21  发布在  Java
关注(0)|答案(2)|浏览(182)

作为参考,我使用的是带有blade语法的laravel 8。
这行代码是我制作的vue组件的一部分:

<li class="w-3/12 md:w-auto pt-0 md:px-4 md:pt-2 md:pb-0 list-none relative" 
v-if="comic.item_type === 'b' && comic.stock > 0" 
v-for="(comic, index) in [...list].slice(0, 20)">


第一个月
我想让20成为动态的。我正在使用V-for lop来渲染页面上的项目,但是我想把渲染的项目限制在20个示例内,直到一个'load more'按钮被点击,所以计划是创建一个函数,每次点击这个参数时,它会增加20。
我是Vue的新手,所以如果有更好的方法,请让我知道!
我尝试过将第二个参数设置为绑定类,但它只是(显然)抛出了一个错误,因为它不应该以这种方式使用。

de90aj5v

de90aj5v1#

尝试以下代码段:

const app = Vue.createApp({
  data() {
    return {
      list: [{"id": 1, "name": "aaa", "item_type": "b", "stock": 9, }, {"id": 2, "name": "bbb", "item_type": "b", "stock": 11, }, {"id": 3, "name": "ccc", "item_type": "b", "stock": 8, }, {"id": 4, "name": "ddd", "item_type": "b", "stock": 8, }, {"id": 5, "name": "eee", "item_type": "b", "stock": 8, }, {"id": 6, "name": "fff", "item_type": "a", "stock": 8, }, {"id": 7, "name": "ggg", "item_type": "b", "stock": 8, }],
      nr: 2
    }
  },
  computed: {
    filteredComics() {
      return [...this.list.filter(l => l.item_type === 'b' && l.stock > 0)]
    },
    comics() {
      return this.filteredComics.slice(0, this.nr)
    }
  },
  methods: {
    loadMore() {
      this.nr = this.nr + this.nr
    }
  }
})
app.mount('#demo')
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
<div id="demo">
  <ul>
    <li class="w-3/12 md:w-auto pt-0 md:px-4 md:pt-2 md:pb-0 list-none relative" v-for="(comic, index) in comics">
      {{ comic.name }}
    </li>
  </ul>
  <button @click="loadMore" v-if="nr < filteredComics.length">more</button>
</div>
biswetbf

biswetbf2#

我会使用一个计算列表变量(包含预过滤的实际列表)沿着一个loadMoreTimes索引(“load more”按钮被按下了多少),它提供了对过滤列表的简单访问,如下所示:

computed: {
  filteredList() {
    return this.list
             .filter(comic => comic.item_type === 'b' && comic.stock > 0)
             .slice(0, (this.loadMoreTimes + 1) * 20);
  }
}

然后,您可以简单地在该数组上循环

<li class="w-3/12 md:w-auto pt-0 md:px-4 md:pt-2 md:pb-0 list-none relative" 
v-for="(comic, index) in filteredList">

顺便说一句:在同一个元素中使用v-ifv-for不是一个好的做法。

相关问题