vue中实现列表效果
Vue 中实现列表效果的方法
使用 v-for 指令
v-for 是 Vue 中最常用的列表渲染方法,可以遍历数组或对象生成列表项。
<template>
<ul>
<li v-for="(item, index) in items" :key="index">
{{ item.name }}
</li>
</ul>
</template>
<script>
export default {
data() {
return {
items: [
{ name: 'Item 1' },
{ name: 'Item 2' },
{ name: 'Item 3' }
]
}
}
}
</script>
使用计算属性处理列表数据
如果需要动态过滤或排序列表数据,可以使用计算属性。

<template>
<ul>
<li v-for="item in filteredItems" :key="item.id">
{{ item.name }}
</li>
</ul>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, name: 'Apple', category: 'fruit' },
{ id: 2, name: 'Carrot', category: 'vegetable' }
],
filterCategory: 'fruit'
}
},
computed: {
filteredItems() {
return this.items.filter(item => item.category === this.filterCategory)
}
}
}
</script>
列表过渡效果
Vue 提供了 <transition-group> 组件实现列表项的过渡动画。
<template>
<transition-group name="list" tag="ul">
<li v-for="item in items" :key="item.id" class="list-item">
{{ item.name }}
</li>
</transition-group>
</template>
<style>
.list-enter-active, .list-leave-active {
transition: all 0.5s;
}
.list-enter, .list-leave-to {
opacity: 0;
transform: translateY(30px);
}
</style>
虚拟滚动优化长列表
对于大型列表,可以使用虚拟滚动技术提升性能,推荐使用 vue-virtual-scroller 库。

npm install vue-virtual-scroller
<template>
<RecycleScroller
class="scroller"
:items="items"
:item-size="50"
key-field="id"
>
<template v-slot="{ item }">
<div class="item">
{{ item.name }}
</div>
</template>
</RecycleScroller>
</template>
<script>
import { RecycleScroller } from 'vue-virtual-scroller'
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
export default {
components: {
RecycleScroller
},
data() {
return {
items: Array.from({ length: 1000 }, (_, i) => ({
id: i,
name: `Item ${i}`
}))
}
}
}
</script>
列表分页功能
实现分页可以结合计算属性和分页逻辑。
<template>
<div>
<ul>
<li v-for="item in paginatedItems" :key="item.id">
{{ item.name }}
</li>
</ul>
<button @click="prevPage" :disabled="currentPage === 1">Previous</button>
<span>Page {{ currentPage }} of {{ totalPages }}</span>
<button @click="nextPage" :disabled="currentPage === totalPages">Next</button>
</div>
</template>
<script>
export default {
data() {
return {
items: Array.from({ length: 100 }, (_, i) => ({
id: i,
name: `Item ${i}`
})),
currentPage: 1,
itemsPerPage: 10
}
},
computed: {
totalPages() {
return Math.ceil(this.items.length / this.itemsPerPage)
},
paginatedItems() {
const start = (this.currentPage - 1) * this.itemsPerPage
const end = start + this.itemsPerPage
return this.items.slice(start, end)
}
},
methods: {
nextPage() {
if (this.currentPage < this.totalPages) {
this.currentPage++
}
},
prevPage() {
if (this.currentPage > 1) {
this.currentPage--
}
}
}
}
</script>
列表拖拽排序
使用 vuedraggable 库实现可拖拽排序的列表。
npm install vuedraggable
<template>
<draggable v-model="items" tag="ul" item-key="id">
<template #item="{ element }">
<li>{{ element.name }}</li>
</template>
</draggable>
</template>
<script>
import draggable from 'vuedraggable'
export default {
components: {
draggable
},
data() {
return {
items: [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' }
]
}
}
}
</script>
这些方法涵盖了 Vue 中实现列表效果的主要场景,从基础渲染到高级功能如虚拟滚动和拖拽排序。根据具体需求选择合适的方法即可。






