使用vue-virtual-scroller显示表格

举报
Amrf 发表于 2020/02/19 21:19:28 2020/02/19
【摘要】 遇到页面dom节点过多时vue的加载和刷新的性能就会下降的很厉害,然后就会考虑使用vue-virtual-scroller;(https://github.com/Akryum/vue-virtual-scroller)先看一个issue:https://github.com/Akryum/vue-virtual-scroller/issues/116v0.12.0和v1.0.0版本的差异,...

遇到页面dom节点过多时vue的加载和刷新的性能就会下降的很厉害,然后就会考虑使用vue-virtual-scroller;(https://github.com/Akryum/vue-virtual-scroller

先看一个issue:https://github.com/Akryum/vue-virtual-scroller/issues/116

v0.12.0和v1.0.0版本的差异,新版本移除了原始table的支持;

导致新版本中需要使用模拟的表格,例子https://codesandbox.io/s/pwlrzmjjk7

版本:("vue-virtual-scroller": "1.0.0-rc.2")

VirtualTable.vue

<template>
<div>
<RecycleScroller :items="items" :item-size="32" key-field="_id">
<template slot="before">
<div :key="header" class="th" v-for="header in headers">
{{ header }}
</div>
</template>
<template slot-scope="{ item }">
<div class="td">{{ item.name }}</div>
<div class="td">{{ item.age }}</div>
<div class="td">{{ item.company }}</div>
</template>
</RecycleScroller>
</div>
</template>

<script>
import { RecycleScroller } from "vue-virtual-scroller";
import "vue-virtual-scroller/dist/vue-virtual-scroller.css";
import items from "./data.json";

export default {
components: {
RecycleScroller
},
data: () => ({
items: items.slice(0, 1000),
headers: ["Age", "Name", "Company"]
})
};
</script>

<style>
.scroller {
height: 100vh;
}
.vue-recycle-scroller__slot,
.vue-recycle-scroller__item-view {
display: flex;
width: 100%;
}
.th,
.td {
flex: 1;
}
.vue-recycle-scroller__slot .th:first-child,
.vue-recycle-scroller__item-view .td:first-child {
flex: 2;
}
</style>

对比于旧版本,例子https://codesandbox.io/s/jnxyxr21lv

版本:"vue-virtual-scroller": "0.11.5"

VirtualTable.vue

<template>
<virtual-scroller :items="items" item-height="42" container-tag="table" content-tag="tbody">
<thead slot="before-content">
<tr>
<td>Age</td>
<td>Name</td>
<td>Company</td>
</tr>
</thead>
<template slot-scope="props">
<tr :key="props.itemKey">
<td>{{props.item.age}}</td>
<td>{{props.item.name}}</td>
<td>{{props.item.company}}</td>
</tr>
</template>
</virtual-scroller>
</template>

<script>
import items from "./data.json";

export default {
data: () => ({
items
})
};
</script>

main.js

import VueVirtualScroller from "vue-virtual-scroller";
Vue.use(VueVirtualScroller);

参考:

https://alligator.io/vuejs/vue-virtual-scroller/

也可以考虑后端渲染(https://github.com/vuejsdevelopers/blog/wiki/Pre-Render-A-Vue.js-App-(With-Node-Or-Laravel)),我这次的场景是一个静态服务器,弱后端的情况,所以不太适用;


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。