vue 实现列表
Vue 实现列表的方法
在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式:
基础列表渲染
使用 v-for 指令遍历数组,渲染列表项。item 是当前项,index 是索引(可选)。
<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>
带键值的列表
为每个列表项添加唯一的 key,提升渲染性能。通常使用 id 而非 index 作为 key。

<template>
<ul>
<li v-for="item in items" :key="item.id">
{{ item.name }}
</li>
</ul>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' },
{ id: 3, name: 'Item 3' }
]
};
}
};
</script>
对象列表渲染
遍历对象属性,value 是属性值,key 是属性名(可选)。
<template>
<ul>
<li v-for="(value, key) in object" :key="key">
{{ key }}: {{ value }}
</li>
</ul>
</template>
<script>
export default {
data() {
return {
object: {
name: 'Vue',
version: '3.x',
language: 'JavaScript'
}
};
}
};
</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' },
{ id: 3, name: 'Banana', category: 'fruit' }
]
};
},
computed: {
filteredItems() {
return this.items.filter(item => item.category === 'fruit');
}
}
};
</script>
动态列表操作
结合方法实现列表的动态增删。
<template>
<div>
<ul>
<li v-for="(item, index) in items" :key="index">
{{ item }}
<button @click="removeItem(index)">Remove</button>
</li>
</ul>
<input v-model="newItem" @keyup.enter="addItem" placeholder="Add item">
</div>
</template>
<script>
export default {
data() {
return {
items: ['Item 1', 'Item 2', 'Item 3'],
newItem: ''
};
},
methods: {
addItem() {
if (this.newItem.trim()) {
this.items.push(this.newItem);
this.newItem = '';
}
},
removeItem(index) {
this.items.splice(index, 1);
}
}
};
</script>
使用组件渲染列表
将列表项封装为可复用的组件。
<template>
<ul>
<ListItem
v-for="item in items"
:key="item.id"
:item="item"
@remove="removeItem"
/>
</ul>
</template>
<script>
import ListItem from './ListItem.vue';
export default {
components: { ListItem },
data() {
return {
items: [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' },
{ id: 3, name: 'Item 3' }
]
};
},
methods: {
removeItem(id) {
this.items = this.items.filter(item => item.id !== id);
}
}
};
</script>
注意事项
- 始终为
v-for提供唯一的key,避免直接使用index作为key(除非列表是静态的)。 - 对于复杂列表逻辑,优先使用计算属性或方法处理数据。
- 列表数据更新时,确保使用响应式方法(如
push、splice),或直接替换整个数组。






