在Vue项目中使用Ant Design Vue组件库时,常常需要使用Tree(树形控件)组件来展示层级结构数据。用户在使用Tree时,可能需要默认选中某些节点,本文将介绍如何使用Ant Design Vue的Tree组件来实现默认选中。
假设现在我们有如下的树形结构数据:
treeData: [ { title: 'Node1', key: 'node1', children: [ { title: 'Node1.1', key: 'node1-1', children: [ { title: 'Node1.1.1', key: 'node1-1-1', isLeaf: true }, { title: 'Node1.1.2', key: 'node1-1-2', isLeaf: true } ] }, { title: 'Node1.2', key: 'node1-2', isLeaf: true } ] }, { title: 'Node2', key: 'node2', isLeaf: true } ]
我们想要默认选中Node1.1.2
节点。那么我们可以在该节点的数据对象中添加一个selected
属性,并将它设置为true
:
treeData: [ { title: 'Node1', key: 'node1', children: [ { title: 'Node1.1', key: 'node1-1', children: [ { title: 'Node1.1.1', key: 'node1-1-1', isLeaf: true }, { title: 'Node1.1.2', key: 'node1-1-2', isLeaf: true, selected: true // 将该节点设置为默认选中 } ] }, { title: 'Node1.2', key: 'node1-2', isLeaf: true } ] }, { title: 'Node2', key: 'node2', isLeaf: true } ]
接下来,在Tree组件中将该节点的selected
属性映射到组件的selectedKeys
属性上即可完成默认选中:
<template> <a-tree :tree-data="treeData" :selected-keys="selectedKeys"></a-tree> </template> <script> export default { data() { return { treeData: [ { title: 'Node1', key: 'node1', children: [ { title: 'Node1.1', key: 'node1-1', children: [ { title: 'Node1.1.1', key: 'node1-1-1', isLeaf: true }, { title: 'Node1.1.2', key: 'node1-1-2', isLeaf: true, selected: true // 将该节点设置为默认选中 } ] }, { title: 'Node1.2', key: 'node1-2', isLeaf: true } ] }, { title: 'Node2', key: 'node2', isLeaf: true } ], selectedKeys: [] }; }, mounted() { this.selectedKeys = this.treeData.flatMap(node => { if (node.selected) { return node.key; } else if (node.children) { return node.children.flatMap(child => { if (child.selected) { return child.key; } else { return []; } }); } else { return []; } }); } }; </script>
在该例子中,我们使用了ES6的Array.prototype.flatMap()
方法来实现将所有选中的节点的key
值映射到selectedKeys
数组中。flatMap()
方法可以将嵌套的数组平铺成一个一维数组。
defaultExpandedKeys
设置默认展开节点除了selectedKeys
属性,Ant Design Vue的Tree组件还有一个defaultExpandedKeys
属性,用来设置默认展开的节点。该属性接收一个字符串数组,表示哪些节点需要默认展开。
如果在以上的树形结构数据中,我们希望默认展开Node1
节点及其子节点。那么我们可以将defaultExpandedKeys
设置为:
defaultExpandedKeys: ['node1']
完整的代码如下:
<template> <a-tree :tree-data="treeData" :selected-keys="selectedKeys" :default-expanded-keys="defaultExpandedKeys"></a-tree> </template> <script> export default { data() { return { treeData: [ { title: 'Node1', key: 'node1', children: [ { title: 'Node1.1', key: 'node1-1', children: [ { title: 'Node1.1.1', key: 'node1-1-1', isLeaf: true }, { title: 'Node1.1.2', key: 'node1-1-2', isLeaf: true, selected: true // 将该节点设置为默认选中 } ] }, { title: 'Node1.2', key: 'node1-2', isLeaf: true } ] }, { title: 'Node2', key: 'node2', isLeaf: true } ], selectedKeys: [], defaultExpandedKeys: ['node1'] // 将node1设置为默认展开节点 }; }, mounted() { this.selectedKeys = this.treeData.flatMap(node => { if (node.selected) { return node.key; } else if (node.children) { return node.children.flatMap(child => { if (child.selected) { return child.key; } else { return []; } }); } else { return []; } }); } }; </script>
总结:
设置默认选中Ant Design Vue的Tree组件可以通过在数据源中标记选中节点,在组件中映射到selectedKeys
属性上实现。同时,使用defaultExpandedKeys
属性可以设置默认展开的节点。
以上是antd vue tree设置默认选中的详细内容。更多信息请关注PHP中文网其他相关文章!