【问题标题】:How to use vue-virtual-scroll-list in Vuejs?如何在 Vuejs 中使用 vue-virtual-scroll-list?
【发布时间】:2021-12-03 07:48:46
【问题描述】:

< script >
  export default {
    name: 'App',
    data() {
      return {
        items: [{
            price: '1',
            name: 'mm'
          },
          {
            price: '22',
            name: 'aa'
          },
          {
            price: '55',
            name: 'dd'
          },
          {
            price: '77',
            name: 'gg'
          },
          {
            price: '123',
            name: 'kk'
          },
          {
            price: '53',
            name: 'mn'
          },
          {
            price: '11',
            name: 'mm'
          },
          {
            price: '22',
            name: 'a'
          },
          {
            price: '33',
            name: 'd'
          },
          {
            price: '77',
            name: 'g'
          },
          {
            price: '1283',
            name: 'k'
          },
          {
            price: '589',
            name: 'n'
          }
        ]
      }
    }
  } <
  /script>
<template>
  <div id="app">
    <div class="wrapper">
      <virtual-list
        class="list"
        style="height: 360px; overflow-y: auto"
        :data-key="'item'"
        :data-sources="item"
        :data-component="item"
        :estimate-size="3"
      />
      <div class="item" v-for="item in items" :key="item">
        <div class="id">{{ item.price }} {{ item.name }}</div>
      </div>
    </div>
  </div>
</template>

我正在尝试在 vuejs 中实现虚拟滚动,我也可以在 ui 中呈现列表,但无法在虚拟滚动中呈现它们。如图所示。

我正在尝试在 vuejs 中实现虚拟滚动,我也可以在 ui 中呈现列表,但无法在虚拟滚动中呈现它们。如图所示。

尝试安装:- npm install vue-virtual-scroll-list --save

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    您应该为data-component prop 创建 vue 组件,如下所示:

    Item.vue

    <template>
      <div class="item">
        <span>{{ index }} - {{ source.name }}</span>
      </div>
    </template>
    
    <script>
    export default {
      props: {
        index: {
          type: Number,
          default: 0
        },
        source: {
          type: Object,
          default() {
            return {}
          }
        }
      }
    }
    </script>
    
    <style  lang="scss" scoped>
    .item {
      border-bottom: 1px solid gray;
    }
    </style>
    

    然后在virtual-list中使用

    App.vue

    <template>
      <div id="app">
        <div class="wrapper">
          <virtual-list
            class="list"
            style="height: 360px; overflow-y: auto"
            data-key="key"
            :keeps="20"
            :data-sources="computedItems"
            :data-component="Item"
          />
        </div>
      </div>
    </template>
    
    <script>
    import Item from './Item'
    export default {
      name: 'App',
      data() {
        return {
          Item,
          items: [
            { price: '1', name: 'mm' },
            { price: '22', name: 'aa' },
            { price: '55', name: 'dd' },
            { price: '77', name: 'gg' },
            { price: '123', name: 'kk' },
            { price: '53', name: 'mn' },
            { price: '11', name: 'mm' },
            { price: '22', name: 'a' },
            { price: '33', name: 'd' },
            { price: '77', name: 'g' },
            { price: '1283', name: 'k' },
            { price: '589', name: 'n' }
          ]
        }
      },
      computed: {
        computedItems() {
          return this.items.map((item, index) => {
            item.key = `item_${index}`
            return item
          })
        }
      }
    }
    </script>
    

    如果您没有每个项目的唯一键,请创建一个计算方法来添加它,就像示例中一样。

    这里是code

    【讨论】:

    • 在这种情况下data-key="id",您可以使用items from data for data-sources 而不是computedItems
    • 在上面的例子中你有productid但是你不能使用它,因为它不是唯一的。基于docsdata-key 需要来自项目的唯一字段
    • 为了清楚起见,请阅读vue-virtual-scroll-list 文档
    猜你喜欢
    • 2022-12-14
    • 2017-04-27
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    相关资源
    最近更新 更多