vue实现list
Vue 实现列表(List)的方法
在 Vue 中实现列表功能通常使用 v-for 指令,结合数据绑定和动态渲染。以下是几种常见的实现方式:
基础列表渲染
使用 v-for 指令遍历数组,动态生成列表项。数据通常存储在组件的 data 或 setup 中。
<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>
列表事件处理
为列表项添加点击或其他事件处理逻辑。
<template>
<ul>
<li
v-for="item in items"
:key="item.id"
@click="handleItemClick(item)"
>
{{ item.name }}
</li>
</ul>
</template>
<script>
export default {
methods: {
handleItemClick(item) {
console.log('Clicked:', item.name);
}
}
};
</script>
动态列表更新
通过方法动态添加或删除列表项,触发视图更新。
<template>
<div>
<button @click="addItem">Add Item</button>
<ul>
<li v-for="item in items" :key="item.id">
{{ item.name }}
<button @click="removeItem(item.id)">Remove</button>
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' }
],
nextId: 3
};
},
methods: {
addItem() {
this.items.push({ id: this.nextId, name: `Item ${this.nextId}` });
this.nextId++;
},
removeItem(id) {
this.items = this.items.filter(item => item.id !== id);
}
}
};
</script>
使用 Vue 3 Composition API
在 Vue 3 中,可以使用 ref 或 reactive 管理列表数据。

<template>
<ul>
<li v-for="item in items" :key="item.id">
{{ item.name }}
</li>
</ul>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const items = ref([
{ id: 1, name: 'Vue 3 Item 1' },
{ id: 2, name: 'Vue 3 Item 2' }
]);
return { items };
}
};
</script>
关键注意事项
- 唯一 Key:
v-for必须为每项绑定唯一:key,通常使用id或唯一标识符。 - 性能优化:大型列表建议使用虚拟滚动(如
vue-virtual-scroller)。 - 响应式更新:直接通过索引修改数组(如
this.items[0] = newItem)不会触发视图更新,需使用Vue.set或替换整个数组。
以上方法覆盖了 Vue 2 和 Vue 3 的列表实现场景,可根据项目需求选择合适方案。






