(1)、el-tree中须要绑定node-key='自定义的id名称'
(2)、在配置data中defaultProps中的属性时,要按照与后端协商的字段名称对称
(3)、重要的是要月后端协商返回字段内容:前端
children: Array(6) //与defaultProps中的children对应 menuId: 1 //与node-key对应 name: "运维管理" //与defauktProps中的label字段相对应; parentId: 0 //父节点id path: "/"
(1)、第一种方法:
一、找到项目中的\node_modules\element-ui\lib\element-ui.common.js文件;
二、搜索文件中的TreeStore.prototype.getCheckedNodes方法中的;node
if (child.checked && (!leafOnly || leafOnly && child.isLeaf)) { checkedNodes.push(child.data); }
三、修改为ios
if ((child.checked || child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) { checkedNodes.push(child.data); }
四、重启项目element-ui
console.log(this.$refs.tree.getCheckedKeys()); //就能够拿到父节点的ID啦
(2)、第二种方法axios
methods: { getCheckedNodes() { var rad='' var ridsa = this.$refs.tree.getCheckedKeys().join(',')// 获取当前的选中的数据[数组] -id, 把数组转换成字符串 var ridsb = this.$refs.tree.getCheckedNodes()// 获取当前的选中的数据{对象} ridsb.forEach(ids=>{//获取选中的全部的父级id rad+=','+ids.pid }) rad=rad.substr(1) // 删除字符串前面的',' var rids=rad+','+ridsa var arr=rids.split(',')// 把字符串转换成数组 arr=[...new Set(arr)]; // 数组去重 rids=arr.join(',')// 把数组转换成字符串 console.log(rids) } }
(3)、第三种方法(推荐) 官方新出的获取半选中状态的方法后端
let parentArr = this.$refs.tree.getHalfCheckedKeys() //获取半选中状态的id let childArr = this.$refs.tree.getCheckedKeys() //获取全选中的id this.addRoleForm.rolePower = parentArr.concat(childArr) //拼接在一块儿
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
data | 展现数据 | Array | ---- | --- |
empty-text | 内容为空的时候展现的文本 | String | --- | --- |
node-key | 每一个树节点用来做为惟一标识的属性,整棵树应该是惟一的 | String | --- | --- |
Props | 配置选项(见props) | object | --- | --- |
render-after-expand | 是否在第一次展开某个树节点后才渲染其子节点 | boolean | --- | true |
load | 加载子树数据的方法,仅当lazy属性为true时生效 | function(node,resolve) | -- | -- |
default-expand-all | 是否默认展开全部节点 | boolean | --- | --- |
show-checkbox | 节点是否可被选择 | boolean | --- | --- |
accordion | 是否每次只打开一个同级树节点展开 | boolean | --- | false |
indent | 相邻级节点间的水平缩进,单位为像素 | number | --- | 16 |
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
label | 指定节点标签为节点对象的某个属性值 | String,function(data,node) | -- | -- |
children | 指定子树为节点对象的某个属性值 | String | --- | --- |
disabled | 指定节点选择框是否禁用为节点对象的某个属性值 | boolean,function(data,node) | -- | -- |
isLeaf | 指定节点是否为叶子节点,仅在指定了 lazy 属性的状况下生效 | boolean,function(data,node) | -- | --- |
<template> <div> <el-tree :data="data2" show-checkbox node-key="menuId" ref="tree" highlight-current :props="defaultProps" @check='slesCheck'> </el-tree> </div> </template> <script> export default { data() { return { data2: [], defaultProps: { children: 'children', label: 'name' }, }; }, methods: { getMenu() { this.$axios.get('menu/queryMenuList').then(res => { this.data2 = res.data console.log(res.data) }) }, slesCheck() { // this.checkedIds = this.$refs.tree.getCheckedKeys(); // var rad = '' // var ridsa = this.$refs.tree.getCheckedKeys().join(',') // 获取当前的选中的数据[数组] -id, 把数组转换成字符串 // var ridsb = this.$refs.tree.getCheckedNodes() // 获取当前的选中的数据{对象} // ridsb.forEach(ids => { //获取选中的全部的父级id // rad += ',' + ids.parentId // }) // rad = rad.substr(1) // 删除字符串前面的',' // var rids = rad + ',' + ridsa // this.addRoleForm.rolePower = rids.split(',') // 把字符串转换成数组 // this.addRoleForm.rolePower = [...new Set(this.addRoleForm.rolePower)]; // 数组去重 // // rids = arr.join(',') // 把数组转换成字符串 // console.log(this.addRoleForm.rolePower) let parentArr = this.$refs.tree.getHalfCheckedKeys() let childArr = this.$refs.tree.getCheckedKeys() this.addRoleForm.rolePower = parentArr.concat(childArr) console.log(parentArr) console.log(childArr) console.log(this.addRoleForm.rolePower) }, getMeunList() { // this.$axios.get('menu/queryMenuIdList?roleId=1').then(res=> // this.$refs.tree.setCheckedKeys( this.checkedIds); //修改前要先获取该el-tree的选中状态 // console.log(res) // }) } }, created() { this.getMenu() // this.getMeunList() } } </script> <style> .el-tree { margin-top: 60px; width: 200px; } </style>