uni-app 多级嵌套循环判断,点击事件传参错误
uni-app 多级嵌套循环判断,点击事件传参错误
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 22H2 | HBuilderX |
示例代码:
源码不能提供
操作步骤:
循环,不想说了
预期结果:
1717528885196132353
实际结果:
点击的id: undefined
bug描述:
当嵌套多层,且在某层判断类型再次循环某字段里面数组,点击事件内的值是第一个判断的值

更多关于uni-app 多级嵌套循环判断,点击事件传参错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app 多级嵌套循环判断,点击事件传参错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app 中,如果你遇到多级嵌套循环中的点击事件传参错误,通常是因为在事件处理函数中传递的参数不正确,或者在循环中绑定的参数有误。以下是一些常见的问题和解决方案:
1. 事件处理函数传参错误
在嵌套循环中,如果你直接在事件处理函数中传递参数,可能会导致参数传递错误。例如:
<template>
<view v-for="(item, index) in list" :key="index">
<view v-for="(subItem, subIndex) in item.subList" :key="subIndex">
<button @click="handleClick(item, subItem)">点击</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
list: [
{ subList: ['A', 'B'] },
{ subList: ['C', 'D'] }
]
};
},
methods: {
handleClick(item, subItem) {
console.log(item, subItem);
}
}
};
</script>
在这个例子中,handleClick 方法会接收到 item 和 subItem 两个参数。如果你发现参数传递错误,可能是因为在循环中绑定的参数有误。
2. 使用闭包传递参数
如果你需要在事件处理函数中传递更多的参数,或者需要动态传递参数,可以使用闭包来确保参数传递正确:
<template>
<view v-for="(item, index) in list" :key="index">
<view v-for="(subItem, subIndex) in item.subList" :key="subIndex">
<button @click="handleClick(item, subItem, index, subIndex)">点击</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
list: [
{ subList: ['A', 'B'] },
{ subList: ['C', 'D'] }
]
};
},
methods: {
handleClick(item, subItem, index, subIndex) {
console.log(item, subItem, index, subIndex);
}
}
};
</script>
在这个例子中,handleClick 方法会接收到 item、subItem、index 和 subIndex 四个参数。这样可以确保在嵌套循环中传递的参数是正确的。
3. 使用 data- 属性传递参数
另一种常见的方式是使用 data- 属性来传递参数,然后在事件处理函数中通过 event.currentTarget.dataset 来获取参数:
<template>
<view v-for="(item, index) in list" :key="index">
<view v-for="(subItem, subIndex) in item.subList" :key="subIndex">
<button :data-item="JSON.stringify(item)" :data-sub-item="subItem" @click="handleClick">点击</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
list: [
{ subList: ['A', 'B'] },
{ subList: ['C', 'D'] }
]
};
},
methods: {
handleClick(event) {
const item = JSON.parse(event.currentTarget.dataset.item);
const subItem = event.currentTarget.dataset.subItem;
console.log(item, subItem);
}
}
};
</script>
在这个例子中,item 和 subItem 通过 data- 属性传递,然后在 handleClick 方法中通过 event.currentTarget.dataset 获取。这种方式可以避免在嵌套循环中直接传递参数时可能出现的错误。
4. 确保 key 的唯一性
在嵌套循环中,确保每个元素的 key 是唯一的,这样可以避免 Vue 在更新 DOM 时出现错误。例如:
<template>
<view v-for="(item, index) in list" :key="index">
<view v-for="(subItem, subIndex) in item.subList" :key="`${index}-${subIndex}`">
<button @click="handleClick(item, subItem)">点击</button>
</view>
</view>
</template>
在这个例子中,key 使用了 index 和 subIndex 的组合,确保每个子元素的 key 是唯一的。
5. 检查事件冒泡
如果你在嵌套循环中使用了事件冒泡,可能会导致事件处理函数被多次触发。你可以使用 event.stopPropagation() 来阻止事件冒泡:
<template>
<view v-for="(item, index) in list" :key="index">
<view v-for="(subItem, subIndex) in item.subList" :key="subIndex">
<button @click="handleClick(item, subItem, $event)">点击</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
list: [
{ subList: ['A', 'B'] },
{ subList: ['C', 'D'] }
]
};
},
methods: {
handleClick(item, subItem, event) {
event.stopPropagation();
console.log(item, subItem);
}
}
};
</script>

