有BUG
问题描述:
为什么我删除一个元素之后,再点击增加,并没有从列表的头部增加?
相关代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>列表动画</title> <style> .v-enter-from { opacity: 0; transform: translateY(30px); } .v-enter-active, .v-leave-active { transition: all 0.5s ease-in; } .v-leave-active { position: absolute; } .v-enter-to { opacity: 1; transform: translateY(0); } .v-leave-to { opacity: 0; transform: translateY(-30px); } .v-move { transition: all 0.5s ease-in; } .list-item { display: inline-block; margin-right: 10px; } </style> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> const app = Vue.createApp({ data() { return { list: [3, 2, 1], }; }, methods: { handleClick() { this.list.unshift(this.list.length + 1); }, handleDel(index) { this.list.splice(index, 1); }, }, template: ` <div> <transition-group> <span class="list-item" v-for="(item,index) in list" :key="item" :dataindex="index" @click="handleDel(index)"> {{item}} </span> </transition-group> <br> <br> <br> <br> <button @click="handleClick">增加</button> </div> `, }); const vm = app.mount("#root"); </script> </html>
22
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕小李
2022-06-16 19:23:28
同学你好,这里出现bug的原因是因为this.list.splice(index, 1);改变了原来数组的长度,也就是说这里就点击删除后返回的是新的数组长度,那么我们在做增加的时候this.list.unshift(this.list.length + 1);数组的长度也发生了改变所导致的。如下:
实际效果如下:
那么也就是说list的长度一直发生改变。所以在点击删除后再添加时就会有问题。
优化建议如下:
既然更改原数组的长度会发生问题,那么我们尝试在添加时更改原有数组,在删除时我们不操作原来的数组,那么就可以解决这个问题了。如下:
js部分如下:
效果如下:
同学试试,祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星