vue在渲染数组时for和splice的坑 实例为:删除所有选中的多选框对应的值

简介: vue在渲染数组时for和splice的坑 实例为:删除所有选中的多选框对应的值

一、vue在渲染数组时for和splice的坑


  • 有坑描述:当同时选中两个相邻的多选框时,会后面一个无法删掉,选中的多个时,选中的第偶数个无法删除。
  • 原因:数组里的值删除了,长度也变短了,但是,循环变量没有变。
  • 解决办法:循环变量自减一


实例:删除所有选中的多选框对应的值


<!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">
    <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
    <title>Document</title>
</head>
<body>
    <style>
        li {
            list-style: none;
        }
    </style>
    <div id="app">
        <button @click="del">删除选中的</button>
        <li v-for="(list,index) in dataList">
            <input type="checkbox" :checked="checks[index]" @click="check(index)">
            <span>{{list}}</span>
        </li>
    </div>
    <script>
        var vm = new Vue({
            el: "#app",
            data: {
                 //判断用户是否选中多选框的,默认没有选中
                checks: [false, false, false, false, false, false],
                //删除的数组
                dataList: [1, 2, 3, 4, 5, 6]
            },
            methods: {
     //用户点击多选框来判断用户选中多选框没有
               check(index) {
                    this.checks[index] = !this.checks[index]
                    console.log(this.checks[index])
                },
                //点击删除按钮时删除的方法
                del() {
                    //循环删除,取数组的长度作为结束循环的条件
                    for (var i = 0; i < this.checks.length; i++) {
                        //判断用户是否选了该多选框
                        if (this.checks[i] === true) {
                            //选中了,删除下标为i的一个值
                            this.dataList.splice(i, 1)
                            //并删除数字所对应的checks[i]为true的值,不删的话多选框是否选中就会乱
                            this.checks.splice(i, 1)
                            //数组里的值删了,数组就会变短;删了下标为0的值,那么下标为1的值的下标就会变成0
                            //所以i要减一
                            i--
                        }
                    }
                }
            },
        })
    </script>
</body>
</html>


相关文章
|
1天前
|
JavaScript 前端开发
【vue】iview如何把input输入框和点击输入框之后的边框去掉
【vue】iview如何把input输入框和点击输入框之后的边框去掉
7 0
|
1天前
|
JavaScript
【vue实战】父子组件互相传值
【vue实战】父子组件互相传值
6 1
|
1天前
|
JavaScript
vue2_引入Ant design vue
vue2_引入Ant design vue
6 0
|
1天前
|
JavaScript
vue知识点
vue知识点
10 4
|
2天前
|
存储 JavaScript 前端开发
【Vue】绝了!这生命周期流程真...
【Vue】绝了!这生命周期流程真...
|
2天前
|
JavaScript 索引
【vue】框架搭建
【vue】框架搭建
7 1
|
2天前
|
JavaScript 前端开发 容器
< 每日小技巧: 基于Vue状态的过渡动画 - Transition 和 TransitionGroup>
Vue 的 `Transition` 和 `TransitionGroup` 是用于状态变化过渡和动画的组件。`Transition` 适用于单一元素或组件的进入和离开动画,而 `TransitionGroup` 用于 v-for 列表元素的增删改动画,支持 CSS 过渡和 JS 钩子。
< 每日小技巧: 基于Vue状态的过渡动画 - Transition 和 TransitionGroup>
|
JavaScript
Vue $watch监听对象属性,数组内对象属性改变
Vue $watch监听对象属性,数组内对象属性改变
896 0
|
2天前
|
资源调度 JavaScript 前端开发
Vue的路由管理:VueRouter的配置和使用
【4月更文挑战第24天】VueRouter是Vue.js的官方路由管理器,用于在单页面应用中管理URL路径与组件的映射。通过安装并引入VueRouter,设置路由规则和创建router实例,可以实现不同路径下显示不同组件。主要组件包括:`&lt;router-link&gt;`用于创建导航链接,`&lt;router-view&gt;`负责渲染当前路由对应的组件。此外,VueRouter还支持编程式导航和各种高级特性,如嵌套路由、路由参数和守卫,以应对复杂路由场景。
|
2天前
|
JavaScript
【vue】setInterval的嵌套实例
【vue】setInterval的嵌套实例
8 1