DDR爱好者之家 Design By 杰米
其实tree的有些方法用起来是很方便的,
this.$refs.tree.getCheckedKeys();这个原生态的方法。官方文档上说的是,返回一个数组。有了这个方法,我们就可以得到选中的每个节点的id,拿到了id,那所有的问题就迎刃而解了。
废话不多说,直接上代码
html
<div id="app"> <el-row> <el-button @click="checkedKeys">得到节点id</el-button> <el-button @click="addNode">添加节点</el-button> <el-button @click="checkedKeys">修改节点</el-button> <el-button @click="deleteNode">删除节点</el-button> <br/> <br/> <el-tree ref="tree" :data="treeList" :props="defaultProps" @node-click="handleNodeClick" show-checkbox=true node-key="id" :check-strictly="true" > </el-tree> <el-input>输入框</el-input> <el-dialog title="添加" :visible.sync="dialogVisible" > <el-form ref="form"> <el-form-item label="节点父类型"> <el-select placeholder="请选择要添加节点的父节点" v-model="treeNode.parentId" @change="selectChange" > <el-option label="根节点" :value="0"></el-option> <el-option v-for="item in treeListData" :label="item.categoryName" :value="item.nodeId"></el-option> </el-select> </el-form-item> <el-form-item label="节点名称"> <el-input placeholder="请输入节点名称" v-model="treeNode.categoryName" style="width: 220px"></el-input> </el-form-item> </el-form> <span> <el-button @click="cancleSaveNode"> 取消 </el-button> <el-button @click="saveNode"> 确定 </el-button> </span> </el-dialog> </el-row> </div>
js代码
<script type="text/javascript"> var _treeNode={ nodeId:0, categoryName:"", parentId:0 } var app = new Vue({ el:'#app', data:{ treeNode:_treeNode, treeList:[], treeListData:[], // 无层级结构节点数据 defaultProps:{ children: 'childList', label: 'name' /* label: 'categoryName'*/ }, dialogVisible:false, // 对话框,默认不打开 api:{ treeDataList:"/category/treeList.do", // 得到节点数据,无层级结构 GET saveTreeNode:"/category/saveTreeNode.do", // 得到节点数据,无层级结构 GET deleteTreeNode:"/category/deleTreeNode.do", } }, methods: { cateListFunction: function () { $.ajax({ type: "get", url: "/category/cateList.do", success: function (result) { app.cateList = result; app.treeList=result; }, error: function (result) { } }); }, // 点击节点名称触发的事件 handleNodeClick: function (data) { alert(data.id); console.log(data); }, // 获得选中的节点的key checkedKeys:function (data) { alert(JSON.stringify(this.$refs.tree.getCheckedKeys())); }, // 添加节点查询所有节点的方法 addNode:function () { // 查询所有节点数据无层级结构 app.getTreeNode(); app.dialogVisible=true; }, // 保存节点 saveNode:function () { //alert(app.treeNode.categoryName+app.treeNode.parentId); axios.post(app.api.saveTreeNode,app.treeNode).then(function (resule) { app.dialogVisible=false; app.treeNode.parentId=0; app.treeNode.categoryName=""; app.cateListFunction(); }); }, cancleSaveNode:function () { app.dialogVisible=false; app.treeNode.parentId=0; app.treeNode.categoryName=""; }, // 下拉框选中事件 selectChange:function (val) { // select控件的option绑定的值为节点的id,我们将值绑定在要添加的元素的父id //alert("得到节点类型"+val); }, // 批量删除节点(若有子节点则不予删除) deleteNode:function () { app.getTreeNode(); var str=[]; str =this.$refs.tree.getCheckedKeys(); if(str.length<=0){ // 因为vue返回的是选中的key的数组 // ,如果没有选择任何元素返回 "[]",这是两个元素,所以我们判断长度为2时,为空 app.$message.error("请至少选择一个节点"); return ; } for(var i in str){ for(var j in app.treeListData){ if(app.treeListData[j].parentId == str[i]){ app.$message.error("父节点不可被删除"); return; } } } axios.post(this.api.deleteTreeNode,str).then(function (result) { app.$message({message: '删除成功', type: 'success'}); app.getTreeNode(); app.cateListFunction(); }); },getTreeNode:function () { // 查询所有节点数据无层级结构 axios.get(this.api.treeDataList) .then( function(result){ // vue给我们封装的得,我们所得到的数据在返回的对象的data属性里 app.treeListData=result.data; }); } }, created: function () { this.getTreeNode(); this.cateListFunction(); } }); </script>
controller
/** * 保存节点 */ @RequestMapping("/saveTreeNode.do") @ResponseBody public void saveTreeNode(@RequestBody TbCategory category){ System.out.println(category.getCategoryName() +"------" +category.getParentId()); categoryService.insert(category); } @RequestMapping("/deleTreeNode.do") @ResponseBody public void deleTreeNode(@RequestBody String str){ System.out.println(str); String [] strIds = str.substring(1,str.length()-1).split(","); for(int i =0;i<strIds.length;i++){ categoryService.delete(Long.valueOf(strIds[i])); // 1,2 } }
以上代码真的没有什么好解释的,大家直接按照我的代码,就不会有问题了
截图:
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2024年11月24日
2024年11月24日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]