ElementUI 使用记录

1,457 阅读2分钟

节点标识和数据字段别名配置

开发树型结构相关需求时, 后台返回的数据和 elementUI 为我们提供的示例中的数据的数据结构可能会有出入, 这时候需要通过树型控件的 node-key 属性和 props 属性来分别指定树型节点的唯一表示和数据的其他配置选项

获取选中数据的值━━不包含半选中状态的节点

this.$refs.tree.getCheckedNodes()

获取选中数据的值━━包含半选中状态的节点

this.$refs.tree.getCheckedNodes().concat(this.$refs.tree.getHalfCheckedNodes())

获取选中数据的唯一标识 node-key 组成的数组━━不包含半选中状态的节点

this.$refs.tree.getCheckedKeys()

获取选中数据的唯一标识 node-key 组成的数组━━包含半选中状态的节点

this.$refs.tree.getCheckedKeys().concat(this.$refs.tree.getHalfCheckedKeys())

设置选择父节点半选中状态

现有 treeData 数据如下:

treeData: [
        {
          treeId: 100,
          name: '一级 1',
          list: [
            {
              treeId: 101,
              name: '一级 1-1'
            }, {
              treeId: 102,
              name: '一级 1-2'
            }, {
              treeId: 103,
              name: '一级 1-3'
            }
          ]
        }, {
          treeId: 200,
          name: '二级 2',
          list: [
            {
              treeId: 201,
              name: '二级 2-1'
            }, {
              treeId: 202,
              name: '二级 2-2'
            }
          ]
        }, {
          treeId: 300,
          name: '三级 3',
          list: [
            {
              treeId: 301,
              name: '三级 3-1'
            }, {
              treeId: 302,
              name: '三级 3-2'
            }
          ]
        }
    ]

当 el-tree 不能 check-strictly 属性时(需要选中一个子节点父节点默认选中), 使用 setCheckedKeys([100, 101]) 想要将 一级 1 和 一级 1-1 选中时, 会发现一级的所有节点都会被选中, el-tree 中也暂时未提供相关可以直接设置类似节点选中的功能, 可以用如下方式解决:

<template>
  <div>
    <el-tree
      :data="treeData"
      :props="treeProps"
      show-checkbox
      default-expand-all
      node-key="treeId"
      ref="tree"
      highlight-current
      check-strictly
    >
    </el-tree>
    <el-button @click="getCheckedValue" type="primary">获取选中值</el-button>
    <el-button @click="setCheckedKeys" type="primary"
      >通过 node-key 设置</el-button
    >
    <el-button @click="resetChecked" type="primary">清空</el-button>
  </div>
</template>

<script>
export default {
  components: {},
  data () {
    return {
      treeProps: {
        children: 'list',
        label: 'name'
      },
      treeData: [
        {
          treeId: 100,
          name: '一级 1',
          list: [
            {
              treeId: 101,
              name: '一级 1-1'
            }, {
              treeId: 102,
              name: '一级 1-2'
            }, {
              treeId: 103,
              name: '一级 1-3'
            }
          ]
        }, {
          treeId: 200,
          name: '二级 2',
          list: [
            {
              treeId: 201,
              name: '二级 2-1'
            }, {
              treeId: 202,
              name: '二级 2-2'
            }
          ]
        }, {
          treeId: 300,
          name: '三级 3',
          list: [
            {
              treeId: 301,
              name: '三级 3-1'
            }, {
              treeId: 302,
              name: '三级 3-2'
            }
          ]
        }
      ]
    }
  },
  created () { },
  methods: {
    getCheckedValue () {
      console.log(this.$refs['tree'].getCheckedNodes())
      console.log(this.$refs['tree'].getCheckedNodes().concat(this.$refs['tree'].getHalfCheckedNodes()))
      console.log(this.$refs['tree'].getCheckedKeys())
      console.log(this.$refs['tree'].getCheckedKeys().concat(this.$refs['tree'].getHalfCheckedKeys()))
    },
    setCheckedKeys () {
      const _this = this
      let checkedKeys = [100, 101, 200, 201]
      checkedKeys.forEach((i, n) => {
        let node = _this.$refs.tree.getNode(i)
        if (node.isLeaf) {
          _this.$refs.tree.setChecked(node, true)
        }
      })
    },
    resetChecked () {
      this.$refs.tree.setCheckedKeys([])
    }
  }
}
</script>