vue实现全选、反选功能


Posted in Javascript onNovember 17, 2020

用vue写业务代码时候,后端大神丢给我一堆数据,要求是做全选,反选功能,然后把用户更改的数据全部返回给他

基本思路

如果父级选中了,那么父级下面的子集全部选中checked=true;

如果子集中选中了一个,那么父级应该被勾选中

如果子集一个都没有选中,那么父级此时应该没有选中

最后提交用户改变后的数组

(大神原谅我的??鹿??/p>

开始上代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
 <title>Document</title>
 <link rel="stylesheet" href="css/role.css" rel="external nofollow" >
</head>
<body>
 <div id="content" v-cloak>
 <form @submit.prevent="submit">
  <div class="list" v-for="item in addList">
   <h3 class="title">
     <label for=""><input type='checkbox' class='item-check-btn' v-model="item.checked" @click="selectAll(item)"></label>
    {{item.name}}
   </h3>
    <ul class="menu">
     <li v-for="(s,index) in item.children">
      <label for="">
       <input type='checkbox' :value="index" v-model="s.checked" class='item-check-btn' @click="selectItem(item,s,index)">
      </label>
      {{s.name}}
     </li>
    </ul>
  </div>
  <div class="bottom_btn">
   <input type="submit" value="确认选择" class="btn">
  </div>
 </form>
 </div>

</body>
<script src="js/lib/vue.js"></script>
<script src="1.js"></script>
</html>

这是html结构部分

基本上没有啥好讲的

只能说一句(我曹,v-for和v-model,真他M的方便呀,哈哈哈哈?)

里面用到v-for嵌套v-for做数据渲染,看效果(效果看起来很low,大神不要在意)

vue实现全选、反选功能

下面开始上js代码了

new Vue({
 el: "#content",
 data: {
  addList: [
  {
  "name":"用户管理",
  "checked":true,
  "children":[
  {"name":"添加","checked":true},
  {"name":"删除","checked":false},
  {"name":"修改","checked":true}
  ]
  }
 ]
 },
 methods: {
  selectAll: function(item) {
   //如果父级被选中,那么子集循环,全被给checked=true
   if(item.checked){
     item.children.forEach(function(item){
      item.checked=true;
     });
   }else{
   //相反,如果没有被选中,子集应该全部checked=false
     item.children.forEach(function(item){
    item.checked=false;
  
    });
   }
  },
 selectItem: function(item,s,index) {
  //父级选中条件
  //子集有选中的,那么父级checked=true
  //some检测的就是有一个满足的就为true
  item.checked=s.checked ? true : item.children.some(a => a.checked);
  },
  submit: function(item,s) {
  //去拿所有的数据,返回给后台
  var formData=this.addList;
  console.log(JSON.stringify(formData));
 }
 }
 });

最后点击改变的结果

vue实现全选、反选功能

返回给后台就是this.addList,此时已经是改变的结果

在项目中,后台给我的json就是this.addList的样子

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

更多vue学习教程请阅读专题《vue实战教程》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
Aug 02 Javascript
JavaScript删除指定子元素代码实例
Jan 13 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
Nov 17 Javascript
Jquery ajax基础教程
Nov 20 Javascript
Js实现简单的小球运动特效
Feb 18 Javascript
全面解析多种Bootstrap图片轮播效果
May 27 Javascript
Vee-Validate的使用方法详解
Sep 22 Javascript
从parcel.js打包出错到选择nvm的全部过程
Jan 23 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
May 08 Javascript
js实现一个简易计算器
Mar 30 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 05 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
Nov 05 Javascript
vue中将网页打印成pdf实例代码
Jun 15 #Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
Jun 15 #Javascript
Angularjs为ng-click事件传递参数
Jun 15 #Javascript
详解原生js实现offset方法
Jun 15 #Javascript
微信小程序 监听手势滑动切换页面实例详解
Jun 15 #Javascript
微信小程序canvas写字板效果及实例
Jun 15 #Javascript
AngularJs实现聊天列表实时刷新功能
Jun 15 #Javascript
You might like
php adodb分页实现代码
2009/03/19 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
layui分页效果实现代码
2017/05/19 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
[02:22]2018DOTA2亚洲邀请赛VG赛前采访
2018/04/03 DOTA
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
基于Python解密仿射密码
2019/10/21 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
python怎么调用自己的函数
2020/07/01 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
Petmate品牌官方网站:宠物用品
2018/11/25 全球购物
人力资源管理专业应届生求职信
2013/09/28 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
python Tkinter模块使用方法详解
2022/04/07 Python
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技