vue点击多选

vue点击多选,之前项目需求中就有用过,最近又遇到了,抽时间写个demo记录下 如有不对还请指出纠正,同样如果有更好的解决方法,欢迎大家留言交流,

直接放全部代码吧,我引的vue element,可直接运行看效果,但是记得自己本地引一下

没有动图 放张图片大家自行脑补一下吧哈哈

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6     <title>Document</title>
  7     <link rel="stylesheet" href="../css/vue.css">
  8     <link rel="stylesheet" href="../css/index.css">
  9     <link rel="stylesheet" href="../css/reast.css">
 10     <style>
 11         /* v-cloak vue解决刷新时出现{{}}闪烁 */
 12         [v-cloak] {
 13             display: none !important;
 14         } 
 15         .OptionsRow{
 16             width: 400px;
 17             height: 200px;
 18             background: #cccccc;
 19             padding: 20px 30px;
 20         }
 21         .OptionsRow ul{
 22             margin-bottom: 20px;
 23         }
 24         .OptionsRow ul li{
 25             display: inline-block;
 26             line-height: 20px;
 27             padding: 0 12px;
 28             color: #000000;
 29             margin-right:10px;
 30             background: #ffffff;
 31             cursor: pointer;
 32             border-radius: 5px;
 33             position: relative;
 34         }
 35         .OptionsRow ul li i{
 36             position: absolute;
 37             top: -5px;
 38             right: -5px;
 39         }
 40 
 41     </style>
 42 </head>
 43 <body>
 44     <div id="app" v-cloak>
 45         <div class="OptionsRow">
 46             <ul>
 47                 <li v-for="(item,index) in typeMind" :key="index" @click="getseclect(item,index)">
 48                     {{item.name}}
 49                     <i class="el-icon-check" v-if="item.selected"></i>
 50                     <i class="el-icon-close" v-else></i>
 51                 </li>
 52             </ul>
 53             <el-row>
 54                 <el-button size="mini" @click="getCheckAll()">{{isCheckAll?'取消全选':'选择全部'}}</el-button>
 55             </el-row>           
 56         </div>
 57     </div>
 58 
 59     
 60 </body>
 61 <script src="../js/vue.js"></script>
 62 <script src="../js/index.js"></script>
 63 <script>
 64     var app=new Vue({
 65         el:'#app',
 66         data:{
 67             typeMind:[
 68                 {name:"小白1",value:1},
 69                 {name:"小白2",value:2},
 70                 {name:"小白3",value:3},
 71                 {name:"小白4",value:4},
 72             ],
 73             typeMind2:[],
 74             isCheckAll:false
 75           
 76         },
 77         created(){
 78             for(var i =0;i<this.typeMind.length;i++){ //循环数据添加selected,如果是后台返回的数据添加不了selected参数的话 可以请求接口时候自行循环添加
 79                 this.typeMind[i].selected  = false
 80             }
 81             console.log(this.typeMind)
 82         },
 83         methods:{
 84              // 经测试可以正常使用
 85             // getseclect(item,index){
 86             //     this.$set(this.typeMind,index,item)
 87             //     if(!item.selected){
 88             //         item.selected = true
 89             //         this.typeMind2.push(item.name)
 90             //     }else{
 91             //         item.selected = false
 92             //         this.typeMind2 = []
 93             //         for(var i =0;i<this.typeMind.length;i++){
 94             //             if(this.typeMind[i].selected == true){
 95             //                 this.typeMind2.push(this.typeMind[i].name)
 96             //             }
 97             //         }
 98             //     }
 99             //     console.log(this.typeMind2)
100                 
101             // }
102 
103             // 经测试可以正常使用
104             // getseclect(item,index){
105             //     this.$set(this.typeMind,index,item) //更新
106             //     this.typeMind[index].selected = !this.typeMind[index].selected;
107             //     this.typeMind2 = []
108             //     for(var i =0;i<this.typeMind.length;i++){
109             //             if(this.typeMind[i].selected == true){
110             //                 this.typeMind2.push(this.typeMind[i].name)
111             //             }
112             //     }
113             //     if(this.typeMind2.length == this.typeMind.length){
114             //         this.isCheckAll = true
115             //     }else{
116             //         this.isCheckAll = false
117             //     }
118             //     console.log( this.typeMind2)
119             // },
120 
121             getseclect(item,index){
122                 this.$set(this.typeMind,index,item) //更新
123                 if(!item.selected){
124                     item.selected = true
125                     this.typeMind2.push(item.name)
126                 }else{
127                     item.selected = false
128                     let d = this.typeMind2.indexOf(item.name) //找到当前点击项的下标
129                     this.typeMind2.splice(d,1)//删除此项
130                 }
131                 // 全选按钮判断
132                 if(this.typeMind2.length == this.typeMind.length){
133                     this.isCheckAll = true
134                 }else{
135                     this.isCheckAll = false
136                 }
137                 console.log( this.typeMind2)
138             },
139             getCheckAll(){
140                 if(!this.isCheckAll){
141                     this.typeMind2 = []
142                     for(var item of this.typeMind){
143                         item.selected = true
144                         this.typeMind2.push(item.name)
145                     }
146                     this.isCheckAll = true
147                 }else{
148                     for(var item of this.typeMind){
149                         item.selected = false
150                         this.typeMind2=[]
151                     }
152                     this.isCheckAll = false
153                 }
154                 
155             }
163         }
164     })
165 
166 </script>
167 </html>

参考以下文章eg:

https://segmentfault.com/a/1190000016313367
https://www.oschina.net/question/3467882_2306340
https://blog.csdn.net/qq_42172829/article/details/88668266
posted @ 2020-09-02 11:58  涵三点  阅读(1435)  评论(0编辑  收藏  举报