在vue3开发中,怎么把列表数据按照列表的样子写出来?

1. 使用 v-for 指令(基本用法)

这是最常用的方式,通过 v-for 指令可以遍历列表数据,并为每个数据项生成对应的列表项元素。

假设你有一个名为 listData 的列表数据,数据项是一些简单的字符串,示例如下:

html

复制

<template>
  <ul>
    <li v-for="(item, index) in listData" :key="index">{{ item }}</li>
  </ul>
</template>

<script setup>
import { ref } from 'vue';

const listData = ref([
  '苹果',
  '香蕉',
  '橙子',
  '草莓'
]);
</script>

在上述代码中:

  • 在模板部分,使用 v-for 指令遍历 listData(item, index) 分别表示列表中的每个数据项和其对应的索引。:key 属性绑定了每个列表项的唯一标识,这里使用索引作为键值(在实际应用中,如果数据有唯一的 id 等属性,建议使用该属性作为键值会更合适)。然后通过插值表达式 {{ item }} 将每个数据项展示在对应的列表项 <li> 元素中。
  • 在脚本部分,通过 ref 创建了一个响应式的列表数据 listData,并初始化了一些示例数据。

2. 使用 v-for 展示对象列表数据

如果列表数据是对象数组,例如每个数据项包含多个属性,展示方式类似,但可以根据需要展示对象的不同属性。

假设 listData 是一个包含对象的列表,每个对象有 name 和 description 两个属性,示例如下:

html

复制

<template>
  <ul>
    <li v-for="(item, index) in listData" :key="index">
      <span>{{ item.name }}</span> - <span>{{ item.description }}</span>
    </li>
  </ul>
</template>

<script setup>
import { ref } from 'vue';

const listData = ref([
  { name: '苹果', description: '一种常见的水果,红色,口感酸甜' },
  { name: '香蕉', description: '黄色的长条形水果,软糯香甜' },
  { name: '橙子', description: '橙色的圆形水果,多汁味甜' },
  { name: '草莓', description: '红色的小巧水果,味道鲜美' }
]);
</script>

这里在模板部分的 <li> 元素中,通过 {{ item.name }} 和 {{ item.description }} 分别展示了每个对象数据项的 name 和 description 属性。

3. 使用组件化方式展示列表数据(可复用性更强)

对于更复杂的列表展示需求,或者需要在多个地方复用列表展示逻辑,可以创建一个专门的组件来展示列表数据。

首先创建一个名为 ListComponent.vue 的组件:

html

复制

<template>
  <ul>
    <li v-for="(item, index) in listData" :key="index">
      <slot :item="item" :index="index"></slot>
    </li>
  </ul>
</template>

<script setup>
import { defineProps } from 'vue';

const props = defineProps({
  listData: Array
});
</script>

在这个组件中:

  • 通过 defineProps 定义了一个名为 listData 的属性,用于接收从父组件传递过来的列表数据。
  • 在模板部分,使用 v-for 遍历 listData,并通过 <slot> 元素将每个数据项 item 和其索引 index 作为属性传递给插槽内容,以便在使用该组件时可以根据具体需求定制每个列表项的展示内容。

然后在父组件中使用这个组件来展示列表数据:

html

复制

<template>
  <ListComponent :listData="listData">
    <template v-slot:default="slotProps">
      <span>{{ slotProps.item.name }}</span> - <span>{{ slotProps.item.description }}</span>
    </template>
  </ListComponent>
</template>

<script setup>
import { ref } from 'vue';
import ListComponent from './ListComponent.vue';

const listData = ref([
  { name: '苹果', description: '一种常见的水果,红色,口感酸甜' },
  { name: '香蕉', description: '黄色的长条形水果,软糯香甜' },
  { name: '橙子', description: '橙色的圆形水果,多汁味甜' },
  { name: '草莓', description: '红色的小巧水果,味道鲜美' }
]);
</script>

在父组件中:

  • 首先导入了 ListComponent 组件。
  • 通过 :listData="listData" 将本地的 listData 数据传递给 ListComponent 组件。
  • 使用 <template v-slot:default="slotProps"> 定义了默认插槽内容,在插槽内容中通过 {{ slotProps.item.name }} 和 {{ slotProps.item.description }} 展示了每个数据项的 name 和 description 属性,这里的 slotProps 就是从 ListComponent 组件的插槽传递过来的包含数据项和索引的对象。

通过以上几种方法,你可以根据具体的列表数据结构和展示需求,在 Vue 3 中合适地将列表数据按照列表的样子展示出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值