ElementPlus Tree 樹形控件

2021-09-26 11:01 更新

Tree 樹形控件

用清晰的層級結(jié)構(gòu)展示信息,可展開或折疊。

基礎(chǔ)用法

基礎(chǔ)的樹形結(jié)構(gòu)展示。


<template>
  <el-tree
  :data="data"
  :props="defaultProps"
  @node-click="handleNodeClick"
></el-tree>
</template>

<script>
  export default {
    data() {
      return {
        data: [
          {
            label: '一級 1',
            children: [
              {
                label: '二級 1-1',
                children: [
                  {
                    label: '三級 1-1-1',
                  },
                ],
              },
            ],
          },
          {
            label: '一級 2',
            children: [
              {
                label: '二級 2-1',
                children: [
                  {
                    label: '三級 2-1-1',
                  },
                ],
              },
              {
                label: '二級 2-2',
                children: [
                  {
                    label: '三級 2-2-1',
                  },
                ],
              },
            ],
          },
          {
            label: '一級 3',
            children: [
              {
                label: '二級 3-1',
                children: [
                  {
                    label: '三級 3-1-1',
                  },
                ],
              },
              {
                label: '二級 3-2',
                children: [
                  {
                    label: '三級 3-2-1',
                  },
                ],
              },
            ],
          },
        ],
        defaultProps: {
          children: 'children',
          label: 'label',
        },
      }
    },
    methods: {
      handleNodeClick(data) {
        console.log(data)
      },
    },
  }
</script>

可選擇

適用于需要選擇層級時使用。


本例還展示了動態(tài)加載節(jié)點(diǎn)數(shù)據(jù)的方法。

<template>
  <el-tree
  :props="props"
  :load="loadNode"
  lazy
  show-checkbox
  @check-change="handleCheckChange"
>
</el-tree>
</template>

<script>
  export default {
    data() {
      return {
        props: {
          label: 'name',
          children: 'zones',
        },
        count: 1,
      }
    },
    methods: {
      handleCheckChange(data, checked, indeterminate) {
        console.log(data, checked, indeterminate)
      },
      handleNodeClick(data) {
        console.log(data)
      },
      loadNode(node, resolve) {
        if (node.level === 0) {
          return resolve([{ name: 'region1' }, { name: 'region2' }])
        }
        if (node.level > 3) return resolve([])

        var hasChild
        if (node.data.name === 'region1') {
          hasChild = true
        } else if (node.data.name === 'region2') {
          hasChild = false
        } else {
          hasChild = Math.random() > 0.5
        }

        setTimeout(() => {
          var data
          if (hasChild) {
            data = [
              {
                name: 'zone' + this.count++,
              },
              {
                name: 'zone' + this.count++,
              },
            ]
          } else {
            data = []
          }

          resolve(data)
        }, 500)
      },
    },
  }
</script>

懶加載自定義葉子節(jié)點(diǎn)


由于在點(diǎn)擊節(jié)點(diǎn)時才進(jìn)行該層數(shù)據(jù)的獲取,默認(rèn)情況下 Tree 無法預(yù)知某個節(jié)點(diǎn)是否為葉子節(jié)點(diǎn),所以會為每個節(jié)點(diǎn)添加一個下拉按鈕,如果節(jié)點(diǎn)沒有下層數(shù)據(jù),則點(diǎn)擊后下拉按鈕會消失。同時,你也可以提前告知 Tree 某個節(jié)點(diǎn)是否為葉子節(jié)點(diǎn),從而避免在葉子節(jié)點(diǎn)前渲染下拉按鈕。

<template>
  <el-tree :props="props" :load="loadNode" lazy show-checkbox> </el-tree>
</template>

<script>
  export default {
    data() {
      return {
        props: {
          label: 'name',
          children: 'zones',
          isLeaf: 'leaf',
        },
      }
    },
    methods: {
      loadNode(node, resolve) {
        if (node.level === 0) {
          return resolve([{ name: 'region' }])
        }
        if (node.level > 1) return resolve([])

        setTimeout(() => {
          const data = [
            {
              name: 'leaf',
              leaf: true,
            },
            {
              name: 'zone',
            },
          ]

          resolve(data)
        }, 500)
      },
    },
  }
</script>

默認(rèn)展開和默認(rèn)選中

可將 Tree 的某些節(jié)點(diǎn)設(shè)置為默認(rèn)展開或默認(rèn)選中


分別通過default-expanded-keys和default-checked-keys設(shè)置默認(rèn)展開和默認(rèn)選中的節(jié)點(diǎn)。需要注意的是,此時必須設(shè)置node-key,其值為節(jié)點(diǎn)數(shù)據(jù)中的一個字段名,該字段在整棵樹中是唯一的。

<template>
  <el-tree
  :data="data"
  show-checkbox
  node-key="id"
  :default-expanded-keys="[2, 3]"
  :default-checked-keys="[5]"
  :props="defaultProps"
>
</el-tree>
</template>

<script>
  export default {
    data() {
      return {
        data: [
          {
            id: 1,
            label: '一級 1',
            children: [
              {
                id: 4,
                label: '二級 1-1',
                children: [
                  {
                    id: 9,
                    label: '三級 1-1-1',
                  },
                  {
                    id: 10,
                    label: '三級 1-1-2',
                  },
                ],
              },
            ],
          },
          {
            id: 2,
            label: '一級 2',
            children: [
              {
                id: 5,
                label: '二級 2-1',
              },
              {
                id: 6,
                label: '二級 2-2',
              },
            ],
          },
          {
            id: 3,
            label: '一級 3',
            children: [
              {
                id: 7,
                label: '二級 3-1',
              },
              {
                id: 8,
                label: '二級 3-2',
              },
            ],
          },
        ],
        defaultProps: {
          children: 'children',
          label: 'label',
        },
      }
    },
  }
</script>

禁用狀態(tài)

可將 Tree 的某些節(jié)點(diǎn)設(shè)置為禁用狀態(tài)


通過disabled設(shè)置禁用狀態(tài)。

<template>
  <el-tree
  :data="data"
  show-checkbox
  node-key="id"
  :default-expanded-keys="[2, 3]"
  :default-checked-keys="[5]"
>
</el-tree>
</template>

<script>
  export default {
    data() {
      return {
        data: [
          {
            id: 1,
            label: '一級 2',
            children: [
              {
                id: 3,
                label: '二級 2-1',
                children: [
                  {
                    id: 4,
                    label: '三級 3-1-1',
                  },
                  {
                    id: 5,
                    label: '三級 3-1-2',
                    disabled: true,
                  },
                ],
              },
              {
                id: 2,
                label: '二級 2-2',
                disabled: true,
                children: [
                  {
                    id: 6,
                    label: '三級 3-2-1',
                  },
                  {
                    id: 7,
                    label: '三級 3-2-2',
                    disabled: true,
                  },
                ],
              },
            ],
          },
        ],
        defaultProps: {
          children: 'children',
          label: 'label',
        },
      }
    },
  }
</script>

樹節(jié)點(diǎn)的選擇


本例展示如何獲取和設(shè)置選中節(jié)點(diǎn)。獲取和設(shè)置各有兩種方式:通過 node 或通過 key。如果需要通過 key 來獲取或設(shè)置,則必須設(shè)置node-key。

<template>
  <el-tree
  :data="data"
  show-checkbox
  default-expand-all
  node-key="id"
  ref="tree"
  highlight-current
  :props="defaultProps"
>
</el-tree>

<div class="buttons">
  <el-button @click="getCheckedNodes">通過 node 獲取</el-button>
  <el-button @click="getCheckedKeys">通過 key 獲取</el-button>
  <el-button @click="setCheckedNodes">通過 node 設(shè)置</el-button>
  <el-button @click="setCheckedKeys">通過 key 設(shè)置</el-button>
  <el-button @click="resetChecked">清空</el-button>
</div>
</template>

<script>
  export default {
    methods: {
      getCheckedNodes() {
        console.log(this.$refs.tree.getCheckedNodes())
      },
      getCheckedKeys() {
        console.log(this.$refs.tree.getCheckedKeys())
      },
      setCheckedNodes() {
        this.$refs.tree.setCheckedNodes([
          {
            id: 5,
            label: '二級 2-1',
          },
          {
            id: 9,
            label: '三級 1-1-1',
          },
        ])
      },
      setCheckedKeys() {
        this.$refs.tree.setCheckedKeys([3])
      },
      resetChecked() {
        this.$refs.tree.setCheckedKeys([])
      },
    },

    data() {
      return {
        data: [
          {
            id: 1,
            label: '一級 1',
            children: [
              {
                id: 4,
                label: '二級 1-1',
                children: [
                  {
                    id: 9,
                    label: '三級 1-1-1',
                  },
                  {
                    id: 10,
                    label: '三級 1-1-2',
                  },
                ],
              },
            ],
          },
          {
            id: 2,
            label: '一級 2',
            children: [
              {
                id: 5,
                label: '二級 2-1',
              },
              {
                id: 6,
                label: '二級 2-2',
              },
            ],
          },
          {
            id: 3,
            label: '一級 3',
            children: [
              {
                id: 7,
                label: '二級 3-1',
              },
              {
                id: 8,
                label: '二級 3-2',
              },
            ],
          },
        ],
        defaultProps: {
          children: 'children',
          label: 'label',
        },
      }
    },
  }
</script>

自定義節(jié)點(diǎn)內(nèi)容

節(jié)點(diǎn)的內(nèi)容支持自定義,可以在節(jié)點(diǎn)區(qū)添加按鈕或圖標(biāo)等內(nèi)容


可以通過兩種方法進(jìn)行樹節(jié)點(diǎn)內(nèi)容的自定義:render-content和 scoped slot。使用render-content指定渲染函數(shù),該函數(shù)返回需要的節(jié)點(diǎn)區(qū)內(nèi)容即可。渲染函數(shù)的用法請參考 Vue 文檔。使用 scoped slot 會傳入兩個參數(shù)node和data,分別表示當(dāng)前節(jié)點(diǎn)的 Node 對象和當(dāng)前節(jié)點(diǎn)的數(shù)據(jù)。注意:由于 jsfiddle 不支持 JSX 語法,所以render-content示例在 jsfiddle 中無法運(yùn)行。但是在實(shí)際的項(xiàng)目中,只要正確地配置了相關(guān)依賴,就可以正常運(yùn)行。

<template>
  <div class="custom-tree-container">
  <div class="block">
    <p>使用 render-content</p>
    <el-tree
      :data="data"
      show-checkbox
      node-key="id"
      default-expand-all
      :expand-on-click-node="false"
      :render-content="renderContent"
    >
    </el-tree>
  </div>
  <div class="block">
    <p>使用 scoped slot</p>
    <el-tree
      :data="data"
      show-checkbox
      node-key="id"
      default-expand-all
      :expand-on-click-node="false"
    >
      <template #default="{ node, data }">
        <span class="custom-tree-node">
          <span>{{ node.label }}</span>
          <span>
            <a @click="append(data)"> Append </a>
            <a @click="remove(node, data)"> Delete </a>
          </span>
        </span>
      </template>
    </el-tree>
  </div>
</div>
</template>

<script>
  let id = 1000

  export default {
    data() {
      const data = [
        {
          id: 1,
          label: '一級 1',
          children: [
            {
              id: 4,
              label: '二級 1-1',
              children: [
                {
                  id: 9,
                  label: '三級 1-1-1',
                },
                {
                  id: 10,
                  label: '三級 1-1-2',
                },
              ],
            },
          ],
        },
        {
          id: 2,
          label: '一級 2',
          children: [
            {
              id: 5,
              label: '二級 2-1',
            },
            {
              id: 6,
              label: '二級 2-2',
            },
          ],
        },
        {
          id: 3,
          label: '一級 3',
          children: [
            {
              id: 7,
              label: '二級 3-1',
            },
            {
              id: 8,
              label: '二級 3-2',
            },
          ],
        },
      ]
      return {
        data: JSON.parse(JSON.stringify(data)),
      }
    },

    methods: {
      append(data) {
        const newChild = { id: id++, label: 'testtest', children: [] }
        if (!data.children) {
          data.children = []
        }
        data.children.push(newChild)
        this.data = [...this.data]
      },

      remove(node, data) {
        const parent = node.parent
        const children = parent.data.children || parent.data
        const index = children.findIndex((d) => d.id === data.id)
        children.splice(index, 1)
        this.data = [...this.data]
      },

      renderContent(h, { node, data, store }) {
        return h(
          'span',
          {
            class: 'custom-tree-node',
          },
          h('span', null, node.label),
          h(
            'span',
            null,
            h(
              'a',
              {
                onClick: () => this.append(data),
              },
              'Append '
            ),
            h(
              'a',
              {
                onClick: () => this.remove(node, data),
              },
              'Delete'
            )
          )
        )
      },
    },
  }
</script>
<style>
  .custom-tree-node {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: 14px;
    padding-right: 8px;
  }
</style>

    

節(jié)點(diǎn)過濾

通過關(guān)鍵字過濾樹節(jié)點(diǎn)


在需要對節(jié)點(diǎn)進(jìn)行過濾時,調(diào)用 Tree 實(shí)例的filter方法,參數(shù)為關(guān)鍵字。需要注意的是,此時需要設(shè)置filter-node-method,值為過濾函數(shù)。

<template>
  <el-input placeholder="輸入關(guān)鍵字進(jìn)行過濾" v-model="filterText"> </el-input>

<el-tree
  class="filter-tree"
  :data="data"
  :props="defaultProps"
  default-expand-all
  :filter-node-method="filterNode"
  ref="tree"
>
</el-tree>
</template>

<script>
  export default {
    watch: {
      filterText(val) {
        this.$refs.tree.filter(val)
      },
    },

    methods: {
      filterNode(value, data) {
        if (!value) return true
        return data.label.indexOf(value) !== -1
      },
    },

    data() {
      return {
        filterText: '',
        data: [
          {
            id: 1,
            label: '一級 1',
            children: [
              {
                id: 4,
                label: '二級 1-1',
                children: [
                  {
                    id: 9,
                    label: '三級 1-1-1',
                  },
                  {
                    id: 10,
                    label: '三級 1-1-2',
                  },
                ],
              },
            ],
          },
          {
            id: 2,
            label: '一級 2',
            children: [
              {
                id: 5,
                label: '二級 2-1',
              },
              {
                id: 6,
                label: '二級 2-2',
              },
            ],
          },
          {
            id: 3,
            label: '一級 3',
            children: [
              {
                id: 7,
                label: '二級 3-1',
              },
              {
                id: 8,
                label: '二級 3-2',
              },
            ],
          },
        ],
        defaultProps: {
          children: 'children',
          label: 'label',
        },
      }
    },
  }
</script>

手風(fēng)琴模式

對于同一級的節(jié)點(diǎn),每次只能展開一個


<template>
  <el-tree
  :data="data"
  :props="defaultProps"
  accordion
  @node-click="handleNodeClick"
>
</el-tree>
</template>

<script>
  export default {
    data() {
      return {
        data: [
          {
            label: '一級 1',
            children: [
              {
                label: '二級 1-1',
                children: [
                  {
                    label: '三級 1-1-1',
                  },
                ],
              },
            ],
          },
          {
            label: '一級 2',
            children: [
              {
                label: '二級 2-1',
                children: [
                  {
                    label: '三級 2-1-1',
                  },
                ],
              },
              {
                label: '二級 2-2',
                children: [
                  {
                    label: '三級 2-2-1',
                  },
                ],
              },
            ],
          },
          {
            label: '一級 3',
            children: [
              {
                label: '二級 3-1',
                children: [
                  {
                    label: '三級 3-1-1',
                  },
                ],
              },
              {
                label: '二級 3-2',
                children: [
                  {
                    label: '三級 3-2-1',
                  },
                ],
              },
            ],
          },
        ],
        defaultProps: {
          children: 'children',
          label: 'label',
        },
      }
    },
    methods: {
      handleNodeClick(data) {
        console.log(data)
      },
    },
  }
</script>

可拖拽節(jié)點(diǎn)

通過 draggable 屬性可讓節(jié)點(diǎn)變?yōu)榭赏献А?/p>


<template>
  <el-tree
  :data="data"
  node-key="id"
  default-expand-all
  @node-drag-start="handleDragStart"
  @node-drag-enter="handleDragEnter"
  @node-drag-leave="handleDragLeave"
  @node-drag-over="handleDragOver"
  @node-drag-end="handleDragEnd"
  @node-drop="handleDrop"
  draggable
  :allow-drop="allowDrop"
  :allow-drag="allowDrag"
>
</el-tree>
</template>

<script>
  export default {
    data() {
      return {
        data: [
          {
            id: 1,
            label: '一級 1',
            children: [
              {
                id: 4,
                label: '二級 1-1',
                children: [
                  {
                    id: 9,
                    label: '三級 1-1-1',
                  },
                  {
                    id: 10,
                    label: '三級 1-1-2',
                  },
                ],
              },
            ],
          },
          {
            id: 2,
            label: '一級 2',
            children: [
              {
                id: 5,
                label: '二級 2-1',
              },
              {
                id: 6,
                label: '二級 2-2',
              },
            ],
          },
          {
            id: 3,
            label: '一級 3',
            children: [
              {
                id: 7,
                label: '二級 3-1',
              },
              {
                id: 8,
                label: '二級 3-2',
                children: [
                  {
                    id: 11,
                    label: '三級 3-2-1',
                  },
                  {
                    id: 12,
                    label: '三級 3-2-2',
                  },
                  {
                    id: 13,
                    label: '三級 3-2-3',
                  },
                ],
              },
            ],
          },
        ],
        defaultProps: {
          children: 'children',
          label: 'label',
        },
      }
    },
    methods: {
      handleDragStart(node, ev) {
        console.log('drag start', node)
      },
      handleDragEnter(draggingNode, dropNode, ev) {
        console.log('tree drag enter: ', dropNode.label)
      },
      handleDragLeave(draggingNode, dropNode, ev) {
        console.log('tree drag leave: ', dropNode.label)
      },
      handleDragOver(draggingNode, dropNode, ev) {
        console.log('tree drag over: ', dropNode.label)
      },
      handleDragEnd(draggingNode, dropNode, dropType, ev) {
        console.log('tree drag end: ', dropNode && dropNode.label, dropType)
      },
      handleDrop(draggingNode, dropNode, dropType, ev) {
        console.log('tree drop: ', dropNode.label, dropType)
      },
      allowDrop(draggingNode, dropNode, type) {
        if (dropNode.data.label === '二級 3-1') {
          return type !== 'inner'
        } else {
          return true
        }
      },
      allowDrag(draggingNode) {
        return draggingNode.data.label.indexOf('三級 3-2-2') === -1
      },
    },
  }
</script>

Attributes

參數(shù) 說明 類型 可選值 默認(rèn)值
data 展示數(shù)據(jù) array
empty-text 內(nèi)容為空的時候展示的文本 String
node-key 每個樹節(jié)點(diǎn)用來作為唯一標(biāo)識的屬性,整棵樹應(yīng)該是唯一的 String
props 配置選項(xiàng),具體看下表 object
render-after-expand 是否在第一次展開某個樹節(jié)點(diǎn)后才渲染其子節(jié)點(diǎn) boolean true
load 加載子樹數(shù)據(jù)的方法,僅當(dāng) lazy 屬性為 true 時生效 function(node, resolve)
render-content 樹節(jié)點(diǎn)的內(nèi)容區(qū)的渲染 Function Function(h, { node, data, store })
highlight-current 是否高亮當(dāng)前選中節(jié)點(diǎn),默認(rèn)值是 false。 boolean false
default-expand-all 是否默認(rèn)展開所有節(jié)點(diǎn) boolean false
expand-on-click-node 是否在點(diǎn)擊節(jié)點(diǎn)的時候展開或者收縮節(jié)點(diǎn), 默認(rèn)值為 true,如果為 false,則只有點(diǎn)箭頭圖標(biāo)的時候才會展開或者收縮節(jié)點(diǎn)。 boolean true
check-on-click-node 是否在點(diǎn)擊節(jié)點(diǎn)的時候選中節(jié)點(diǎn),默認(rèn)值為 false,即只有在點(diǎn)擊復(fù)選框時才會選中節(jié)點(diǎn)。 boolean false
auto-expand-parent 展開子節(jié)點(diǎn)的時候是否自動展開父節(jié)點(diǎn) boolean true
default-expanded-keys 默認(rèn)展開的節(jié)點(diǎn)的 key 的數(shù)組 array
show-checkbox 節(jié)點(diǎn)是否可被選擇 boolean false
check-strictly 在顯示復(fù)選框的情況下,是否嚴(yán)格的遵循父子不互相關(guān)聯(lián)的做法,默認(rèn)為 false boolean false
default-checked-keys 默認(rèn)勾選的節(jié)點(diǎn)的 key 的數(shù)組 array
current-node-key 當(dāng)前選中的節(jié)點(diǎn) string, number
filter-node-method 對樹節(jié)點(diǎn)進(jìn)行篩選時執(zhí)行的方法,返回 true 表示這個節(jié)點(diǎn)可以顯示,返回 false 則表示這個節(jié)點(diǎn)會被隱藏 Function(value, data, node)
accordion 是否每次只打開一個同級樹節(jié)點(diǎn)展開 boolean false
indent 相鄰級節(jié)點(diǎn)間的水平縮進(jìn),單位為像素 number 16
icon-class 自定義樹節(jié)點(diǎn)的圖標(biāo) string - -
lazy 是否懶加載子節(jié)點(diǎn),需與 load 方法結(jié)合使用 boolean false
draggable 是否開啟拖拽節(jié)點(diǎn)功能 boolean false
allow-drag 判斷節(jié)點(diǎn)能否被拖拽 Function(node)
allow-drop 拖拽時判定目標(biāo)節(jié)點(diǎn)能否被放置。type 參數(shù)有三種情況:'prev'、'inner' 和 'next',分別表示放置在目標(biāo)節(jié)點(diǎn)前、插入至目標(biāo)節(jié)點(diǎn)和放置在目標(biāo)節(jié)點(diǎn)后 Function(draggingNode, dropNode, type)

props

參數(shù)說明類型可選值默認(rèn)值
label指定節(jié)點(diǎn)標(biāo)簽為節(jié)點(diǎn)對象的某個屬性值string, function(data, node)
children指定子樹為節(jié)點(diǎn)對象的某個屬性值string
disabled指定節(jié)點(diǎn)選擇框是否禁用為節(jié)點(diǎn)對象的某個屬性值boolean, function(data, node)
isLeaf指定節(jié)點(diǎn)是否為葉子節(jié)點(diǎn),僅在指定了 lazy 屬性的情況下生效boolean, function(data, node)

?方法

Tree 內(nèi)部使用了 Node 類型的對象來包裝用戶傳入的數(shù)據(jù),用來保存目前節(jié)點(diǎn)的狀態(tài)。 Tree 擁有如下方法:

方法名說明參數(shù)
filter對樹節(jié)點(diǎn)進(jìn)行篩選操作接收一個任意類型的參數(shù),該參數(shù)會在 filter-node-method 中作為第一個參數(shù)
updateKeyChildren通過 keys 設(shè)置節(jié)點(diǎn)子元素,使用此方法必須設(shè)置 node-key 屬性(key, data) 接收兩個參數(shù),1. 節(jié)點(diǎn) key 2. 節(jié)點(diǎn)數(shù)據(jù)的數(shù)組
getCheckedNodes若節(jié)點(diǎn)可被選擇(即 show-checkbox 為 true),則返回目前被選中的節(jié)點(diǎn)所組成的數(shù)組(leafOnly, includeHalfChecked) 接收兩個 boolean 類型的參數(shù),1. 是否只是葉子節(jié)點(diǎn),默認(rèn)值為 false 2. 是否包含半選節(jié)點(diǎn),默認(rèn)值為 false
setCheckedNodes設(shè)置目前勾選的節(jié)點(diǎn),使用此方法必須設(shè)置 node-key 屬性(nodes) 接收勾選節(jié)點(diǎn)數(shù)據(jù)的數(shù)組
getCheckedKeys若節(jié)點(diǎn)可被選擇(即 show-checkbox 為 true),則返回目前被選中的節(jié)點(diǎn)的 key 所組成的數(shù)組(leafOnly) 接收一個 boolean 類型的參數(shù),若為 true 則僅返回被選中的葉子節(jié)點(diǎn)的 keys,默認(rèn)值為 false
setCheckedKeys通過 keys 設(shè)置目前勾選的節(jié)點(diǎn),使用此方法必須設(shè)置 node-key 屬性(keys, leafOnly) 接收兩個參數(shù),1. 勾選節(jié)點(diǎn)的 key 的數(shù)組 2. boolean 類型的參數(shù),若為 true 則僅設(shè)置葉子節(jié)點(diǎn)的選中狀態(tài),默認(rèn)值為 false
setChecked通過 key / data 設(shè)置某個節(jié)點(diǎn)的勾選狀態(tài),使用此方法必須設(shè)置 node-key 屬性(key/data, checked, deep) 接收三個參數(shù),1. 勾選節(jié)點(diǎn)的 key 或者 data 2. boolean 類型,節(jié)點(diǎn)是否選中 3. boolean 類型,是否設(shè)置子節(jié)點(diǎn) ,默認(rèn)為 false
getHalfCheckedNodes若節(jié)點(diǎn)可被選擇(即 show-checkbox 為 true),則返回目前半選中的節(jié)點(diǎn)所組成的數(shù)組-
getHalfCheckedKeys若節(jié)點(diǎn)可被選擇(即 show-checkbox 為 true),則返回目前半選中的節(jié)點(diǎn)的 key 所組成的數(shù)組-
getCurrentKey獲取當(dāng)前被選中節(jié)點(diǎn)的 key,使用此方法必須設(shè)置 node-key 屬性,若沒有節(jié)點(diǎn)被選中則返回 null
getCurrentNode獲取當(dāng)前被選中節(jié)點(diǎn)的 data,若沒有節(jié)點(diǎn)被選中則返回 null
setCurrentKey通過 key 設(shè)置某個節(jié)點(diǎn)的當(dāng)前選中狀態(tài),使用此方法必須設(shè)置 node-key 屬性(key, shouldAutoExpandParent=true) 1. 待被選節(jié)點(diǎn)的 key,若為 null 則取消當(dāng)前高亮的節(jié)點(diǎn) 2. 是否擴(kuò)展父節(jié)點(diǎn)
setCurrentNode通過 node 設(shè)置某個節(jié)點(diǎn)的當(dāng)前選中狀態(tài),使用此方法必須設(shè)置 node-key 屬性(node, shouldAutoExpandParent=true) 1. 待被選節(jié)點(diǎn)的 node 2. 是否擴(kuò)展父節(jié)點(diǎn)
getNode根據(jù) data 或者 key 拿到 Tree 組件中的 node(data) 要獲得 node 的 key 或者 data
remove刪除 Tree 中的一個節(jié)點(diǎn),使用此方法必須設(shè)置 node-key 屬性(data) 要刪除的節(jié)點(diǎn)的 data 或者 node
append為 Tree 中的一個節(jié)點(diǎn)追加一個子節(jié)點(diǎn)(data, parentNode) 接收兩個參數(shù),1. 要追加的子節(jié)點(diǎn)的 data 2. 子節(jié)點(diǎn)的 parent 的 data、key 或者 node
insertBefore為 Tree 的一個節(jié)點(diǎn)的前面增加一個節(jié)點(diǎn)(data, refNode) 接收兩個參數(shù),1. 要增加的節(jié)點(diǎn)的 data 2. 要增加的節(jié)點(diǎn)的后一個節(jié)點(diǎn)的 data、key 或者 node
insertAfter為 Tree 的一個節(jié)點(diǎn)的后面增加一個節(jié)點(diǎn)(data, refNode) 接收兩個參數(shù),1. 要增加的節(jié)點(diǎn)的 data 2. 要增加的節(jié)點(diǎn)的前一個節(jié)點(diǎn)的 data、key 或者 node

Events

事件名稱說明回調(diào)參數(shù)
node-click節(jié)點(diǎn)被點(diǎn)擊時的回調(diào)共三個參數(shù),依次為:傳遞給 data 屬性的數(shù)組中該節(jié)點(diǎn)所對應(yīng)的對象、節(jié)點(diǎn)對應(yīng)的 Node、節(jié)點(diǎn)組件本身。
node-contextmenu當(dāng)某一節(jié)點(diǎn)被鼠標(biāo)右鍵點(diǎn)擊時會觸發(fā)該事件共四個參數(shù),依次為:event、傳遞給 data 屬性的數(shù)組中該節(jié)點(diǎn)所對應(yīng)的對象、節(jié)點(diǎn)對應(yīng)的 Node、節(jié)點(diǎn)組件本身。
check-change節(jié)點(diǎn)選中狀態(tài)發(fā)生變化時的回調(diào)共三個參數(shù),依次為:傳遞給 data 屬性的數(shù)組中該節(jié)點(diǎn)所對應(yīng)的對象、節(jié)點(diǎn)本身是否被選中、節(jié)點(diǎn)的子樹中是否有被選中的節(jié)點(diǎn)
check當(dāng)復(fù)選框被點(diǎn)擊的時候觸發(fā)共兩個參數(shù),依次為:傳遞給 data 屬性的數(shù)組中該節(jié)點(diǎn)所對應(yīng)的對象、樹目前的選中狀態(tài)對象,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四個屬性
current-change當(dāng)前選中節(jié)點(diǎn)變化時觸發(fā)的事件共兩個參數(shù),依次為:當(dāng)前節(jié)點(diǎn)的數(shù)據(jù),當(dāng)前節(jié)點(diǎn)的 Node 對象
node-expand節(jié)點(diǎn)被展開時觸發(fā)的事件共三個參數(shù),依次為:傳遞給 data 屬性的數(shù)組中該節(jié)點(diǎn)所對應(yīng)的對象、節(jié)點(diǎn)對應(yīng)的 Node、節(jié)點(diǎn)組件本身
node-collapse節(jié)點(diǎn)被關(guān)閉時觸發(fā)的事件共三個參數(shù),依次為:傳遞給 data 屬性的數(shù)組中該節(jié)點(diǎn)所對應(yīng)的對象、節(jié)點(diǎn)對應(yīng)的 Node、節(jié)點(diǎn)組件本身
node-drag-start節(jié)點(diǎn)開始拖拽時觸發(fā)的事件共兩個參數(shù),依次為:被拖拽節(jié)點(diǎn)對應(yīng)的 Node、event
node-drag-enter拖拽進(jìn)入其他節(jié)點(diǎn)時觸發(fā)的事件共三個參數(shù),依次為:被拖拽節(jié)點(diǎn)對應(yīng)的 Node、所進(jìn)入節(jié)點(diǎn)對應(yīng)的 Node、event
node-drag-leave拖拽離開某個節(jié)點(diǎn)時觸發(fā)的事件共三個參數(shù),依次為:被拖拽節(jié)點(diǎn)對應(yīng)的 Node、所離開節(jié)點(diǎn)對應(yīng)的 Node、event
node-drag-over在拖拽節(jié)點(diǎn)時觸發(fā)的事件(類似瀏覽器的 mouseover 事件)共三個參數(shù),依次為:被拖拽節(jié)點(diǎn)對應(yīng)的 Node、當(dāng)前進(jìn)入節(jié)點(diǎn)對應(yīng)的 Node、event
node-drag-end拖拽結(jié)束時(可能未成功)觸發(fā)的事件共四個參數(shù),依次為:被拖拽節(jié)點(diǎn)對應(yīng)的 Node、結(jié)束拖拽時最后進(jìn)入的節(jié)點(diǎn)(可能為空)、被拖拽節(jié)點(diǎn)的放置位置(before、after、inner)、event
node-drop拖拽成功完成時觸發(fā)的事件共四個參數(shù),依次為:被拖拽節(jié)點(diǎn)對應(yīng)的 Node、結(jié)束拖拽時最后進(jìn)入的節(jié)點(diǎn)、被拖拽節(jié)點(diǎn)的放置位置(before、after、inner)、event

Scoped Slot

name說明
自定義樹節(jié)點(diǎn)的內(nèi)容,參數(shù)為 { node, data }


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號