首页 > 其他分享 >异步加载树形组件(antd-vue)

异步加载树形组件(antd-vue)

时间:2024-01-18 16:01:12浏览次数:27  
标签:node 异步 arr vue const level return antd children

1、html

 <a-directory-tree
          :tree-data="useDataSourceTreeList"
          v-model:selectedKeys="selectedKey"
          v-if="datasourceId"
          blockNode
          class="tree-card"
          :showIcon="false"
          @select="dirSelect2"
          checkStrictly
          style="margin-top: 10px"
          :load-data="onLoadData"
>
</a-directory-tree>

2、onLoadData异步函数

const onl oadData = (treeNode) => {
  if (treeNode?.dataRef?.fileType == 'file') {
	return;
  }
  if (treeNode?.dataRef?.fileType !== 'file') {
	getFtpDatasourceFileBySourceId({
	  datasourceId: datasourceId.value || '',
	  filePath: treeNode?.dataRef.filePath
	}).then((res) => {
	  const { data = [] } = res || {};
	  if (res && data?.[0]?.children?.length) {
		treeNode.dataRef.children = data?.[0]?.children;
		const list = addLevelToTree(useDataSourceTreeList.value);
		const arr = uniqueArray(list, 'fileName');
		useDataSourceTreeList.value = [...arr];
		useDataSourceTreeList2.value = [...arr];
	  }
	});
  }
};

3、其他工具函数

/**
 * 增加树形层级level属性
 * @param tree
 * @param level
 * @returns
 */
export const addLevelToTree = (tree: any, level = 0, callBack = (item) => {}) => {
  tree?.forEach((node: any) => {
	node.level = level;
	node.value = node?.id;
	node.key = node?.id;
	callBack(node);
	if (node?.children && node?.children?.length > 0) {
	  addLevelToTree(node.children, level + 1);
	}
  });
  return tree;
};

// 去重
export const uniqueArray = (arr = [], key: any) => {
  const keyValues = new Set();
  let val;
  return arr.filter((obj) => {
	val = obj[key];
	if (keyValues.has(val)) {
	  return false;
	}
	keyValues.add(val);
	return true;
  });
};

标签:node,异步,arr,vue,const,level,return,antd,children
From: https://www.cnblogs.com/songkomei/p/17972664

相关文章

  • Vue3.0 路由动画(页面跳转)
    前言vue3.0的页面组件之前切换的动画效果,在移动端H5页面,交互体验比较好,就是带Vue3的Transition组件 之前的写法是 Transition的组件要包在routerView外面,但是3.0的语法就是要在在里面了,不然会黄色警告<divclass="animation"><RouterViewv-slot="{Component,......
  • C# Task 异步的一些流程简单测试 Task 测试 异步测试
    测试程序:publicclassTAKS_TEST{privatereadonlyDictionary<int,Task<T_TEST>>DataDic=newDictionary<int,Task<T_TEST>>();privateT_TESTGetRes(inti){Thread.Sleep(i*1000);returnnewT_TEST(){......
  • 记一个vue2中使用路由时,在同一个页面跳转,但是url参数不同,不会重新渲染页面的问题
    vue2中使用路由时,页面自己跳转自己,但是携带的参数不一样预期想要的结果是:感冒2会跟随着url的参数进行变化,但是并没用 解决方法: 在App.vue这个页面中的router-view添加  :key="$route.fullPath"结果在自己跳转自己之后会刷新页面 达成:参考:https://blog.csdn.ne......
  • HBuilderX mac M1 打包 vite/vue3 报错处理办法(pnpm)
    项目运行h5的时候都没有问题,但是要运行到微信开发者工具的时候打包报11:40:54.480Specificallythe"esbuild-darwin-arm64"packageispresentbutthisplatform11:40:54.480needsthe"esbuild-darwin-64"packageinstead.Peopleoftengetintothis很好看去论......
  • Stream (是异步版本的列表)、StreamBuilder(局部数据更新)
    Stream流Stream的字面意思是水流,Stream不像Future那样只会在未来获取一个值,它可以异步获取0个或者多个值。如果说Future是一个异步版本的int或者String,Stream则更像是异步版本的列表,List,List,列表里面可能会有0个或者多个元素。classMyHomePageextendsStatefulWidget{......
  • Fetch方法——一种简单合理的跨网络异步获取资源方式
    FetchAPI是一个JavaScript接口,用于访问和操纵HTTP管道的一些具体部分,例如请求和响应。FetchAPI提供了一个全局fetch()方法,一种简单,合理的来跨网络异步获取资源的方式。一个基本的fetch请求:fetch("http://localhost:4000/datas.json",{method:"POST",......
  • Java异步编程详解
    在现代应用程序开发中,异步编程变得越来越重要,特别是在处理I/O密集型任务时。Java提供了一套强大的异步编程工具,使得开发者能够更有效地处理并发任务。本篇博文将深入探讨Java中异步编程的方方面面,通过具体例子详细说明异步编程的实践。异步编程的背景在传统的同步编程模型中,任务......
  • vue+tsc+noEmit导致打包报TS类型错误问题及解决方法
    当我们新建vue3项目,package.json文件会自动给我添加一些配置选项,这写选项基本没有问题,但是在实际操作过程中,当项目越来越复杂就会出现问题。本文列举一个目前我遇到的一个问题:打包后报了一堆TS类型错误,怎么消除这些错误?项目环境:Vue3+Vite+TS当项目进行打包时候,突然发现终端......
  • vue3+lottie-web加载json格式动画
    项目中要用动画设计说gif会失真,用json格式动画吧。我虎躯一震,json格式动画什么鬼?lottie库什么鬼。。。。不废话,直接上重点环境:编辑器webstorm,前端技术栈vue3+vite+ts安装lottie-webyarnaddlottie-web引入lottie,引入json格式动画文件.importlottiefrom'lott......
  • vue-element-admin/litemall后端,超过两级嵌套路由无法缓存的问题
    本文主要针对的是litemall后端,vue-element-admin只需稍作修改应该也可以适用。路由扁平的思路主要来源于https://blog.csdn.net/weixin_40119256/article/details/111475571,另外解决面包屑显示问题,此文章作记录以供有需要的同行参考。keep-alive用于缓存不活跃的组件实例,避免重......