vue v-for横向遍历

** V-for的横向遍历**
对于二维数组只需要嵌套循环即可,这里说的是对一维数组遍历的特殊情况
在循环表格内容的时候一般都是纵向循环列。但是如果在一个多行3列的table里想要按从左到右的顺序就有些困难。
此时需要将要循环的数组以3个为分割,分割成多维数组,然后再使用v-for的嵌套循环即可

// 这里是html代码
<tbody>
              <tr v-for="(item, index) in riskCategories" :key="index">
                <td v-for="(i, j) in item" :key="j" class="beforeclass" :class="{ afterclass: num }">
                  <img :src="i.iconUrl" alt="" />
                  <span style="fontsize:10px">{{ i.name }}</span>
                </td>
              </tr>
</tbody>
//这里是data的数据及处理
data(){
	return{
	riskCategories:[],//接口拿到的数组
	}
}
//对数组的处理
if (this.riskCategories) {
          let n = Math.ceil(this.riskCategories.length / 3)//以3列为标准,数据总长度除以三向上取整可以得到表格该有的总行数
          let res = []//作为分割后的数组的容器
          for (let i = 0; i < n; i++) {
            // slice() 方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。且原始数组不会被修改。
            //每次循环都会执行一次语句
            //第一行,1肯定是小于总行数的,执行分割语句,第0个到第3个切成一个数组为第一行数据,push到res
            //以此类推。注意i是从0开始的,这样在拿i*3的时候才是从第0个拿到第3个的
            let temp = this.riskCategories.slice(i * 3, i * 3 + 3)
            res.push(temp)
          }
          //等一切都万事大吉了,就把新的多维数组重新赋值给老父亲就好了
          this.riskCategories = res
        }

刚开始是这个样子
在这里插入图片描述

最后的数组就长这个样子
在这里插入图片描述

但是这样做有一个问题,由于表格是遍历出来的td,所以当最后一行可能会有1个或者2个的情况,所以还需要做个自动补全否则会很丑,补全的方法就是填空项

//这里我设置的最多有18个子项的情况。也就是说6行整。调整的时候必须是3的倍数
if (this.riskCategories.length < 18) {
          for (let i = this.cardinfo.riskCategories.length; i < 18; i++) {
            this.riskCategories.push({ a: null, b: null })//a,b是一个子项里的数据,有什么就给这个字段null就行了
          }
        }

如果有其他好办法欢迎大佬告知

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现这个功能,你可以使用 Vue 的计算属性来计算每个 item 在数组中的索引以及所在的行数。具体操作步骤如下: 1. 在模板中使用 v-for 循环数组 arr,将每个 item 显示在一个 div 中,并绑定一个 click 事件。 ```html <template> <div> <div v-for="(item, index) in arr" :key="item.id" @click="handleClick(item)"> {{ item.name }} </div> </div> </template> ``` 2. 在计算属性中计算每个 item 在数组中的索引以及所在的行数。首先,需要知道每行能容纳的 item 的数量,可以根据容器的宽度和每个 item 的宽度来计算。然后,可以根据每个 item 在数组中的索引和每行能容纳的 item 的数量来计算该 item 所在的行数。 ```javascript computed: { itemsPerRow() { // 计算每行能容纳的 item 的数量 const containerWidth = this.$refs.container.clientWidth; const itemWidth = this.$refs.item[0].clientWidth; return Math.floor(containerWidth / itemWidth); }, indexedArr() { // 给每个 item 添加索引和行数属性 return this.arr.map((item, index) => { const rowIndex = Math.floor(index / this.itemsPerRow); return { ...item, index, rowIndex }; }); } } ``` 3. 在 handleClick 方法中,可以通过事件对象的 target 属性获取点击的元素,然后遍历 indexedArr 数组,找到该元素对应的 item,并获取该 item 的 rowIndex 属性即可。 ```javascript methods: { handleClick(item) { const clickedElement = event.target; const index = Array.from(this.$refs.item).indexOf(clickedElement); const clickedItem = this.indexedArr[index]; console.log(clickedItem.rowIndex); } } ``` 注意,这里需要使用 Array.from 将类数组对象转换为数组,以便使用 indexOf 方法来查找点击的元素在数组中的索引。同时,需要在每个 div 中添加一个 ref 属性,以便在计算属性中获取每个 item 的宽度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值