列表渲染: v-for=" "的使用

140 阅读1分钟

v-for遍历产生列表时, 每个项标签都需要有一个唯一的key值,

如果数组元素有自己的标识数据, 用它作为key值, 否则才选择下标作为key。

v-for 可以遍历数组 也可以 遍历对象。

使用时记两种方法:

1.有唯一标识则使用时用唯一标识 如:id

2.只要不涉及删改时可以使用下标index

<template>
  <div>
    <h2>v-for 遍历数组</h2>
    <ul>
      <li v-for="(item, index) in loList" :key="item.id">
        {{item.id}}--{{item.name}}--{{item.age}}
        --<button @click="deleteItem(index)">删除</button>
        --<button @click="updateItem(index, {id: Date.now(), name:'更新后的name', age: 8})">更新当前点击的对象</button>
      </li>
    </ul>

    <h2>v-for 遍历对象</h2>
    <ul>
    <li v-for="(value, key) in loList[1]" :key="key">
        {{key}}---{{value}}
      </li>
    </ul>
  </div>
</template>

<script lang="ts">
// vue3.0版本语法
import { defineComponent, ref } from 'vue';
export default defineComponent({
  name: "组件名",
  setup() {
    const loList = ref([
      {
        id: '11',
        age: 1,
        name: 's赛15分钟速通'
      },
      {
        id: '12',
        age: 2,
        name: 's赛5连冠任务'
      },
      {
        id: '13',
        age: 3,
        name: '单吃shy任务'
      },
      {
        id: '14',
        age: 4,
        name: ''
      },
    ])
    // 删除某个元素的事件
    const deleteItem = (index) => {
      loList.value.splice(index, 1)
    }
    // 更新(替换)指定下标的对象
    const updateItem = (index, newP) => {
      // 方式一: 直接根据下标替换数组元素
      // loList.value[index] = newP
      // 方法二: 调用数组更新元素的方法splice
      // loList.value.splice(index, 1, newP)

      // 方式三: 更新数组元素对象内部的属性
      loList.value[index].id = newP.id
      loList.value[index].name = newP.name
      loList.value[index].age = newP.age
    }
    return {
      loList,deleteItem,updateItem
    }
  },
});
</script>

点击了 更新当前点击的 按钮后页面显示效果:

image.png

image.png

点击了 删除按钮后页面显示效果:

image.png

image.png