当前位置: 首页 > 知识库问答 >
问题:

javascript - tree组件点击请求了多次接口?

钦枫
2024-04-15

引入子组件

<CheckTreee @nodeClicked="nodeClicked"></CheckTreee>

子组件中获取选中的id

<el-tree  ref="treesRef"  style="max-width: 600px"  :data="dataTree"  node-key="id"  :props="defaultProps"  show-checkbox  :expand-on-click-node="false"  @check-change="handleClick"/>let checkID = ref<any[]>([]);const handleClick = async (node: any, isCheck: any) => {  if (isCheck) {    checkID.value.push(node.id);  } else {    checkID.value.forEach((item, i) => {      if (item === node.id) {        checkID.value.splice(i, 1);      }    });  }  emit("nodeClicked", checkID);};

///根据id取调用接口查数据

const nodeClicked = (val: any) => {  selectData.type = val.value.join(",");  getData(selectData);};

图片.png

共有2个答案

荀俊迈
2024-04-15

你应该在点击复选框的事件回调里去抛事件,这也符合你的语义nodeClicked
截屏2024-04-14 00.24.56.png

左华灿
2024-04-15

方法一:

   // 引入防抖函数,如lodash的debounce   import { debounce } from 'lodash';   // 在父组件中定义防抖处理的nodeClicked方法   const debouncedNodeClicked = debounce(nodeClicked, 300); // 延迟时间可以根据需求调整   // 修改子组件引用,使用防抖后的回调函数   <CheckTreee @nodeClicked="debouncedNodeClicked" />   

方法二:

   // 子组件中引入一个定时器和一个临时变量存储待发送的节点ID   let timer: NodeJS.Timeout | null = null;   let pendingNodeIds: any[] = [];   const handleClick = async (node: any, isCheck: any) => {     if (isCheck) {       checkID.value.push(node.id);       pendingNodeIds.push(node.id);     } else {       checkID.value.forEach((item, i) => {         if (item === node.id) {           checkID.value.splice(i, 1);         }       });       pendingNodeIds = pendingNodeIds.filter(id => id !== node.id);     }     clearTimeout(timer); // 清除之前的定时器     timer = setTimeout(() => {       // 在延迟时间后触发nodeClicked事件,发送请求       emit("nodeClicked", pendingNodeIds);       pendingNodeIds = []; // 重置待发送节点ID列表     }, 300); // 延迟时间可以根据需求调整   };   
 类似资料:
  • 问题内容: 当用户单击登录或注册按钮时,我试图阻止多个请求。这是我的代码,但是不起作用。只是第一次工作正常,然后返回false。 有任何想法吗?谢谢! 问题答案: 问题在这里: 不再指向按钮。

  • 第一次调用时,激发一次 第二次调用时,会激发两次 等等 编辑: 下面是一个jsfiddle示例(如下所示)。 要复制,请单击按钮,然后单击,然后单击一个并重复此过程 您将注意到,第二次执行该过程时,文本会加倍

  • 问题内容: 我有这个小网站,我想用请求库填写表格。问题是当填写表单数据并单击按钮时,我无法到达下一个站点(输入不起作用)。 重要的是,我无法通过某种类型的点击漫游器来做到这一点。这需要完成,这样我才能在没有图形的情况下运行。 前三个条目的名称,消息,符号是文本区域,步骤是我认为的按钮。 当我通过chrome手动发送请求时,表单数据如下所示: 姓名:约翰·约翰 讯息:XXX 签名:XXX 第1步 b

  • 本文向大家介绍按钮的Ajax请求时一次点击两次提交的解决方法,包括了按钮的Ajax请求时一次点击两次提交的解决方法的使用技巧和注意事项,需要的朋友参考一下 页面中的按钮的type是submit的: <input type="submit" value="Create" id="submit" /> ajax的请求,在JQuery中是: 发生两次提交的原因是在执行完ajax请求后,并没有阻止subm

  • ChartBuilder3.0版本的所有组件都提供JavaScript脚本编写和控制功能,ChartBuilder开放的组件控制接口包括如下几类: 组件样式控制 组件数据控制 辅助工具调用 组件动画控制 此文档适合ChartBuilder实施人员使用,在ChartBuilder工具上写JavaScript的时候,在输入this.之后,代码行也会给相应的API提示,选择API后再代码行里也会有辅助的