vue实现全选、反选功能
作者:前端交流ing 发布时间:2024-04-09 10:58:43
标签:vue,全选,反选
用vue写业务代码时候,后端大神丢给我一堆数据,要求是做全选,反选功能,然后把用户更改的数据全部返回给他
基本思路
如果父级选中了,那么父级下面的子集全部选中checked=true;
如果子集中选中了一个,那么父级应该被勾选中
如果子集一个都没有选中,那么父级此时应该没有选中
最后提交用户改变后的数组
(大神原谅我的啰嗦哈)
开始上代码
<!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,大神不要在意)
下面开始上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));
}
}
});
最后点击改变的结果
返回给后台就是this.addList,此时已经是改变的结果
在项目中,后台给我的json就是this.addList的样子
关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。
更多vue学习教程请阅读专题《vue实战教程》


猜你喜欢
- 安装并导入模块打开命令行窗口,输入:pip install -i https://mirrors.aliyun.com/pypi/simpl
- 进入查询窗口后,输入下面的语句: CREATE INDEX mycolumn_index ON mytable (myclumn) 这个语句
- 启动targetcli时遭遇ImportError: cannot import name ALUATargetPortGrou
- PHP中的MYSQL常用函数1、mysql_connect()-建立数据库连接格式:resource mysql_connect([stri
- 目录wtforms使用1(简单版):使用2(复杂版):wtforms安装:pip3 install wtforms使用1(简单版):from
- 之前因为项目的原因需要使用Oracle数据库,由于时间有限没办法从基础开始学习,而且oracle操作的命令界面又太不友好,于是就找到了PL/
- 本文为大家分享了多种方法求质数python实现代码,供大家参考,具体内容如下题目要求是求所有小于n的质数的个数。 求质数方法1: 穷举法:
- <?php function genpage(&$sql,$page_size=10) { global $pages,$su
- 插入视图的条件: 1.如果视图是基于一个基础表产生的,那么这就称为非连接视图,所有的非连接视图都是可以更新的,也就是说可以在该视图上进行,I
- 本文实例讲述了python使用PyGame模块播放声音的方法。分享给大家供大家参考。具体实现方法如下:import pygamepygame
- 介绍本文将展示如何利用Python爬虫来实现诗歌接龙。该项目的思路如下:利用爬虫爬取诗歌,制作诗歌语料库;将诗歌分句,形成字典:键(key)
- 本文实例讲述了Python使用itchat模块实现简单的微信控制电脑功能。分享给大家供大家参考,具体如下:#!/usr/bin/python
- 在知乎上看到这样一个问题:MySQL 查询 select * from table where id in (几百或几千个 id) 如何提高
- 是否应该开启缓冲器? 通过脚本程序启动缓冲器 在ASP脚本的顶部包含Response.Buffer=True ,IIS就会将页面的内容缓存。
- 1、字典中的键存在时,可以通过字典名+下标的方式访问字典中改键对应的值,若键不存在则会抛出异常。如果想直接向字典中添加元素可以直接用字典名+
- 作者:Roland Smart原文链接:http://www.adaptivepath.com/ideas/newsletter/archi
- 如果对自然语言分类,有很多中分法,比如英语、法语、汉语等,这种分法是最常见的。在语言学里面,也有对语言的分类方法,比如什么什么语系之类的。我
- 本文实例分析了PHP中怎样防止SQL注入。分享给大家供大家参考。具体分析如下:一、问题描述:如果用户输入的数据在未经处理的情况下插入到一条S
- 本文介绍了vue.js $refs和$emit 父子组件交互的方法,分享给大家,废话不多说直接看代码:<strong>父调子 $
- 在Python中用matplotlib画图的时候,为了区分曲线的类型,给曲线上面加一些标识或者颜色。以下是颜色和标识的汇总。颜色(color