当前位置: 首页 > news >正文

【由果索因】模块化代码后,这样的JavaScript技巧才值得用

一、背景

前端js代码出现重复,因此想放到一个文件中进行复用,使其模块化,需要调整几个函数。函数都是要访问到后台接口的Axios请求。

js语法版本是ECMAScript6

在这里插入图片描述

前端功能是部门用户树形选择器,且选择器是懒加载模式。点击父节点请求到后台才会加载到子节点数据。

不止一个功能模块需要用到该部门用户树形选择器,因此,将重复的功能函数进行模块化。放到dept.js文件中。

当前的文件就是直接在Vue组件文件的method中直接写需要用到的函数。

二、思路

2.1 树形选择器组件

看一下需要用到的属性,options是数据,load-options就是懒加载节点数据的函数。

<el-form-item label="负责人" v-permission="permission.select">
    <treeselect
      v-model="form.userId"
      :options="depts"
      :load-options="toLoadDepts"
      style="width: 190px" placeholder="选择负责人" />
</el-form-item>

2.2 部门初始化数据函数改造

将初始化数据的函数放到dept.js文件中。

//获取部门和员工数据
export function getDeptAndStaff(params) {
  return request({
    url: 'api/dept/getDeptAndStaff',
    method: 'get',
    params
  })
}
//初始查询部门
export async function queryDepts() {

  let depts = []
  //每次只请求当前节点的所包含的下一级数据
  await getDeptAndStaff({ enabled: true }).then(res => {

    depts = res.content.map(function(obj) {
      if (obj.hasChildren) {
        obj.children = null
      }
      return obj
    })
  })
  return depts
}

2.3 节点数据函数改造

//加载节点数据
export function loadDepts({ action, parentNode, callback }) {
  if (action === LOAD_CHILDREN_OPTIONS) {
    //根据父节点ID查询子节点数据
    getDeptAndStaff({ enabled: true, pid: parentNode.id }).then(res => {
      parentNode.children = res.content.map(function(obj) {
        if (obj.hasChildren) {
          obj.children = null
        }
        // if (String(obj.id).includes("staff")){
        //   delete obj.isDisabled
        // }
        return obj
      })
      setTimeout(() => {
        callback()
      }, 200)
    })
  }
}

2.4 导出引用

export default { queryDepts, loadDepts }

2.5 按需引用

import { queryDepts,loadDepts } from '@/api/system/dept'

2.6 在method中调用

async getDepts() {
     //每次只请求当前节点的所包含的下一级数据
     this.depts = await queryDepts()
   },
toLoadDepts({ action, parentNode, callback }) {
   loadDepts({ action, parentNode, callback})
 }

三、几点疑问

  1. 直接在组件中写所需函数,请求到后台,就不需要同步async 函数,而模块化后,就需要;
    执行顺序的问题,虽然在mounted函数中取http请求的返回值取不到,但是不影响下拉框功能使用。
  2. 导出的函数也要加export
    和export命令的用法有关,导出函数就是在其前加export

相关文章:

  • 计算机网络知识点总结(每日更新)
  • 免费题库接口
  • 盘点十个让工作效率倍增且有趣的 Python工具包
  • 内联函数——C++
  • 数据结构-线性表
  • vue3.0--2.watch、vue3生命周期函数、Teleport、自定义事件、状态驱动的动态 CSS、Suspense
  • Java · 面向对象编程 · 包的概念 · 继承 · 组合
  • Zabbix6通过ODBC方式监控Oracle 19C最佳实践
  • 企业复杂的数据治理需求,TempoDF让数据开发更简单!
  • hive on spark 执行sql报错
  • 离散化(保序)
  • 文本纠错易语言代码
  • 【python】遇上COS美图怎么办?当然是大胆冲呀~
  • 苏小妍java开发工程师-一面面经
  • 「SpringCloud Alibaba」Sentinel实现熔断与限流
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • AHK 中 = 和 == 等比较运算符的用法
  • angular2开源库收集
  • canvas 绘制双线技巧
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • JSDuck 与 AngularJS 融合技巧
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Protobuf3语言指南
  • SQLServer之创建显式事务
  • ucore操作系统实验笔记 - 重新理解中断
  • 基于游标的分页接口实现
  • 设计模式 开闭原则
  • 提醒我喝水chrome插件开发指南
  • 一个完整Java Web项目背后的密码
  • 正则与JS中的正则
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • ​业务双活的数据切换思路设计(下)
  • #{}和${}的区别?
  • #if #elif #endif
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (day 12)JavaScript学习笔记(数组3)
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (十) 初识 Docker file
  • (转)linux下的时间函数使用
  • (转)Unity3DUnity3D在android下调试
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net 简单实现MD5
  • .NET的微型Web框架 Nancy
  • .NET多线程执行函数
  • .net开发引用程序集提示没有强名称的解决办法
  • @angular/cli项目构建--Dynamic.Form
  • [BUUCTF 2018]Online Tool(特详解)
  • [C# 网络编程系列]专题六:UDP编程
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [ES-5.6.12] x-pack ssl
  • [ffmpeg] 定制滤波器