要实现默认展开和默认选中效果,只要初始化的时候给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 版权协议,转载请附上原文出处链接和本声明。