根据数据状态动态渲染不同颜色的卡片列表

本文介绍了一种使用卡片形式代替表格展示数据的方法,通过Vue框架实现动态样式和过滤器功能,提高了列表展示的美观性和用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

老规矩,少废话先看效果

最近接到需求,列表不想用table形式展示,想用卡片形式展示,下面贴上实现代码

这个逻辑理清楚后,实现起来没什么难度。

HTML部分
 <el-row :gutter="10">
      <el-col v-for="(item,index) in yearLists" :key="index" :lg="8" :xl="6">
        <div class="item">
          <div :class="getClass(item.stateid)" @click="goYearDetail(item)">
            <div class="content">
              <p class="jiaob">{{ item.stateid|getType }}</p>
              <p class="unit">{{ item.subname }}</p>
              <p class="title">{{ item.name }}</p>
              <p class="time">创建时间:{{ item.createtime|escape }}</p>
              <el-button class="btnDetails" size="small" type="primary">详情</el-button>
            </div>
          </div>
        </div>
      </el-col>
    </el-row>
过滤器部分
 filters: {
 //时间
    escape(time) {
      const currentTime = new Date()
      const valueTime = new Date(time)
      const valueDay = valueTime.getDate()
      const currenDay = currentTime.getDate()
      if (
        valueTime.getFullYear() === currentTime.getFullYear() &&
        valueTime.getMonth() === currentTime.getMonth() &&
        valueDay + 2 > currenDay
      ) {
        return currenDay === valueDay ? '今天' : '昨天'
      } else {
        //
        return time.substr(0, 10)
      }
    },
    
    //状态
    getType(id) {
      switch (id) {
        case '1':
          return '制定中'
        case '4':
          return '审核中'
        case '5':
          return '已通过'
        case '6':
          return '被驳回'
      }
    }
  },
动态获取class
 getClass(id) {
      switch (id) {
        case '1':
          return 'item_make'
        case '4':
          return 'item_submit'
        case '5':
          return 'item_fulfil'
        case '6':
          return 'item_reject'
        default:
          return 'item_make'
      }
    },
style部分
//共用部分
.item {
  
}

//动态渲染部分
.item_make {

}
.item_submit {

}
.item_fulfil {

}
.item_reject {

}
<think>好的,用户想了解如何在Vue.js中使用v-for指令来渲染水果列表。首先,我需要回忆一下v-for的基本用法。v-for通常用于循环数组或对象,生成多个元素。用户提到水果列表,所以应该是一个数组的例子。 首先,我应该确定数据结构,比如一个包含水果名称的数组,可能还有其他属性如价格、颜色等。但用户可能只需要简单的例子,所以先展示最基本的用法。例如,用v-for遍历数组,每个水果生成一个列表。 然后,考虑到Vue.js的列表渲染需要key属性,必须提醒用户使用:key来维护状态,通常用唯一标识符,比如索引或id。但需要注意,如果数组可能变化,比如增删元素,使用索引作为key可能会有问题,所以最好建议使用唯一的id。不过在简单示例中,可能暂时用索引。 接下来,用户可能需要更复杂的例子,比如显示水果的其他属性,或者在模板中使用更复杂的结构,比如表格或卡片。所以需要准备一个稍微扩展的例子,比如水果对象数组,包含名称和价格,然后在列表中显示这些属性。 另外,用户可能想知道如何在组件中使用v-for,或者如何处理事件,比如点击某个水果触发方法。不过用户的问题主要集中在渲染示例,所以这部分可能作为扩展内容,简要提及。 还需要注意v-for的语法,比如(item, index) in items的形式,以及在使用对象时的(value, key, index)顺序。不过水果列表通常是数组,所以主要展示数组的情况。 另外,要确保代码示例符合Vue 2或Vue 3的语法。根据引用中的内容,比如引用[4]提到了modelValue和emits,看起来是Vue 3的写法,但用户提供的示例代码中可能混合了不同版本的语法。但用户的问题可能需要一个通用的例子,所以应该使用Vue 2的选式API,因为更常见,或者明确说明版本。 最后,生成相关问题,考虑用户可能进一步的问题,比如key的作用、性能优化、嵌套循环等,或者与v-if的区别,如引用[2]提到的v-show和v-if的区别,可以关联到相关问题中。</think>### Vue.js中使用v-for渲染水果列表的实现方法 在Vue.js中,`v-for`指令通过遍历数组或对象来实现动态列表渲染。以下是三种典型场景的实现示例: **1. 基础列表渲染** ```html <template> <ul> <li v-for="(fruit, index) in fruits" :key="index"> {{ index + 1 }}. {{ fruit }} </li> </ul> </template> <script> export default { data() { return { fruits: ['苹果', '香蕉', '橙子', '葡萄'] } } } </script> ``` - `:key`属性用于维护虚拟DOM的节点状态,索引作为临时方案,推荐使用唯一ID[^2] - 渲染结果会生成带有序号的水果列表 **2. 对象数组渲染** ```html <template> <div class="fruit-list"> <div v-for="fruit in fruitObjects" :key="fruit.id"> <h3>{{ fruit.name }}</h3> <p>价格:¥{{ fruit.price }}</p> </div> </div> </template> <script> export default { data() { return { fruitObjects: [ { id: 1, name: '芒果', price: 12.8 }, { id: 2, name: '山竹', price: 25.6 } ] } } } </script> ``` - 使用对象唯一标识符作为key的最佳实践 - 支持复杂数据结构的渲染 **3. 带过滤功能的列表** ```html <template> <div> <input v-model="searchText" placeholder="搜索水果"> <ul> <li v-for="fruit in filteredFruits" :key="fruit"> {{ fruit }} </li> </ul> </div> </template> <script> export default { data() { return { searchText: '', allFruits: ['苹果', '香蕉', '火龙果', '荔枝'] } }, computed: { filteredFruits() { return this.allFruits.filter(fruit => fruit.includes(this.searchText) ) } } } </script> ``` - 结合`v-model`实现动态过滤[^4] - 使用计算属性优化渲染性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值