Quasar中tree获取数据后默认展开和默认选中

  • Post author:
  • Post category:其他



要实现默认展开和默认选中效果,只要初始化的时候给id值和等待数据获取后再进行tree渲染即可。



一、Html代码以及解释如下

<q-tree
	v-if="initFlag"
	:nodes="networkData"
	node-key="id"
	label-key="name"
	children-key="organizationList"
	v-model:selected="selected"
	no-connectors
	@click="handleClick"
	default-expand-all
/>

v-if=“initFlag”:这里是为了等待异步请求成功后,tree才进行数据渲染,这样就可以进行默认展开树形了。

node-key=“id”:node-key是必填,建议选中绑定唯一值,这里用的是id。

label-key=“name”:label-key是可以根据自己获取的数据进行绑定,默认是label。

children-key=“organizationList”:children-key同理label-key,默认是children。

v-model:selected=“selected”:v-model:selected是进行当前所选节点的键。

no-connectors:不显示节点之间的连接线。

@click=“handleClick”:监听所选节点方法。

default-expand-all:默认树在

第一次渲染时

展开其所有分支。



二、Js具体的代码:

<script >
import { ref, defineComponent, onMounted } from "vue";
import { postOrganizationTree } from "src/api/organization";

export default defineComponent({
	setup(props, ctx) {
		const selected = ref(null);
		const networkData = ref([]);
		const initFlag = ref(false);
	
		// 获取树数据且初始化展开树
		const getData = async () => {
			networkData.value = await postOrganizationTree({});
			initFlag.value = true;
			initSelected();
		};
	
		// 选择网点
		const handleClick = () => {
			const data = getTreeData(networkData.value, selected.value);
			ctx.emit("getList", data);
		};
	
		// 默认选择第一个网点
		const initSelected = () => {
			selected.value = networkData.value[0].id;
			const data = getTreeData(networkData.value, selected.value);
			console.log("data", data);
			ctx.emit("getList", data);
		};
	
		// 遍历树得到选择id对应的数据
		const getTreeData = (list, id) => {
			for (let i = 0; i < list.length; i++) {
				let obj = list[i];
				if (obj.id === id) {
					return obj;
				} else {
					if (obj.organizationList && obj.organizationList.length > 0) {
						let res = getTreeData(obj.organizationList, id);
						if (res) {
							return res;
						}
					}
				}
			}
		};
	
		onMounted(() => {
			getData();
		});
	
		return {
			handleClick,
			networkData,
			selected,
			initFlag
		};
	}
});
</script>



三、效果图如下

在这里插入图片描述



版权声明:本文为qq_43025587原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。