Antd a-tree 树形控件,选中的节点高亮。

该文章展示了如何在Vue应用中创建一个树形列表,用于显示设备信息。通过<a-tree>组件,结合data和methods,实现了默认展开所有节点、节点选择时标题颜色变化以及根据设备状态显示不同颜色的功能。设备的属性如名称、状态和ID都在节点标题中动态展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现最简单的树展示列表
效果图:
在这里插入图片描述


template中:

	<a-tree
        :tree-data="deviceList"
        :defaultExpandAll="defaultExpandAll"   //默认展开所有
        :replaceFields="replaceFields"  //替换treeNode中title,key,children字段为deviceList中对应的字段
        @select="onTitleSelect"  //点击树节点触发
      >
        <!-- ⚠️重点这这里⚠️ -->
        <template #title="{ equipmentName, deviceState, deviceType, deviceId }">  //title中的值为deviceList中有的值
          <div :class="activeItem.key == deviceId ? 'color-active' : ''">   //点击的树节点字体高亮
              <span
                class="title_circle"  //默认的class样式
                :class="
                  deviceState == 1  //不同数据展示不同的class样式
                    ? 'color_green'
                    : deviceState == 2
                    ? 'color_red'
                    : deviceState == 3
                    ? 'color_gray'
                    : ''
                "
              ></span>
            {{ equipmentName }}  //节点名称
          </div>
        </template>
      </a-tree>



script中:

data(){
	return {
		deviceList: [],
		defaultExpandAll: true,  //为true默认展开所有
	    replaceFields: {   //替换treeNode中title,key,children字段为deviceList中对应的字段
	        title: "equipmentName",
	        key: "deviceId",
	      },
	}
},
methods: {
	// 变更数上标题的颜色
    onTitleSelect(selectedKeys, item) {
      this.activeItem = item.selectedNodes[0];
    },
}
antd Tree控件提供了搜索功能,可以通过设置onSearch属性来实现。 首先,在Tree组件中添加一个Search组件,如下所示: ```jsx import { Tree, Input } from 'antd'; const { Search } = Input; class MyTree extends React.Component { state = { expandedKeys: [], searchValue: '', autoExpandParent: true, }; onExpand = expandedKeys => { this.setState({ expandedKeys, autoExpandParent: false, }); }; onChange = e => { const { value } = e.target; const expandedKeys = dataList .map(item => { if (item.title.indexOf(value) > -1) { return getParentKey(item.key, this.props.treeData); } return null; }) .filter((item, i, self) => item && self.indexOf(item) === i); this.setState({ expandedKeys, searchValue: value, autoExpandParent: true, }); }; render() { const { treeData } = this.props; const { searchValue, expandedKeys, autoExpandParent } = this.state; const loop = data => data.map(item => { const index = item.title.indexOf(searchValue); const beforeStr = item.title.substr(0, index); const afterStr = item.title.substr(index + searchValue.length); const title = index > -1 ? ( <span> {beforeStr} <span style={{ color: '#f50' }}>{searchValue}</span> {afterStr} </span> ) : ( <span>{item.title}</span> ); if (item.children) { return { title, key: item.key, children: loop(item.children), }; } return { title, key: item.key, }; }); return ( <div> <Search style={{ marginBottom: 8 }} placeholder="Search" onChange={this.onChange} /> <Tree onExpand={this.onExpand} expandedKeys={expandedKeys} autoExpandParent={autoExpandParent} treeData={loop(treeData)} /> </div> ); } } ``` 这里的onSearch函数会在Search组件的值发生变化时被调用。其中,onChange函数会根据搜索值来过滤出需要展开的节点,然后再将搜索值传递给loop函数,该函数会返回一个新的树形结构,其中匹配搜索值的节点会被高亮显示。 最后,在render函数中返回更新后的树形结构即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值