简化 vue 代码中大量 if 操作

当我们在 vue 项目中可能出现以下场景:

javascript 复制代码
export enum OperationEnum {
  '详情' = 1,
  '分配' = 2,
  '邀请入驻' = 3,
  '合同签约' = 4,
  '撤销签约' = 5,
  '申请上线' = 6,
}
javascript 复制代码
const operation = (param) => {
  if (param.operationType === OperationEnum.详情) {
    routeDetailDialogRef.value.openDialog({
      clueId: param.rowId.clueId,
    });
  }
  if (param.operationType === OperationEnum.分配) {
    routeOperationDialogRef.value.openDialog({
      clueId: param.rowId.row.clueId,
      dialogType: param.rowId.type,
    });
  }
  if (param.operationType === OperationEnum.邀请入驻) {
    inviteSettleDialogRef.value.openDialog({
      clueId: param.rowId.clueId,
    });
  }
  if (param.operationType === OperationEnum.合同签约) {
    contractSignDialogRef.value.openDialog({
      clueId: param.rowId.clueId,
    });
  }
  if (param.operationType === OperationEnum.撤销签约) {
    revokeContractDialogRef.value.openDialog({
      clueId: param.rowId.clueId,
    });
  }
  if (param.operationType === OperationEnum.申请上线) {
    confirmOnlineDialogRef.value.openDialog({
      clueId: param.rowId.clueId,
    });
  }
};

存在一个对应的枚举值,一个根据传入参数执行的函数,大量的 if 判断让代码变得很繁琐,也不利于后期维护。

有一个简单的处理方法如下:

javascript 复制代码
const operation = (param) => {
  const HandleMap = {
    [OperationEnum.详情]: {
      callback: () => {
        routeDetailDialogRef.value.openDialog({
          clueId: param.rowId.clueId,
        });
      },
    },
    [OperationEnum.分配]: {
      callback: () => {
        routeOperationDialogRef.value.openDialog({
          clueId: param.rowId.row.clueId,
          dialogType: param.rowId.type,
        });
      },
    },
    [OperationEnum.邀请入驻]: {
      callback: () => {
        inviteSettleDialogRef.value.openDialog({
          clueId: param.rowId.clueId,
        });
      },
    },
    [OperationEnum.合同签约]: {
      callback: () => {
        contractSignDialogRef.value.openDialog({
          clueId: param.rowId.clueId,
        });
      },
    },
    [OperationEnum.撤销签约]: {
      callback: () => {
        revokeContractDialogRef.value.openDialog({
          clueId: param.rowId.clueId,
        });
      },
    },
    [OperationEnum.申请上线]: {
      callback: () => {
        confirmOnlineDialogRef.value.openDialog({
          clueId: param.rowId.clueId,
        });
      },
    },
  };
  const target = HandleMap[param.operationType];
  target?.callback();
};

修改后的代码,更加方便后期维护,如果有更多的枚举值,继续往下写就好。之后遇到类似的代码都可以使用该方法进行完善。

相关推荐
小陈工1 天前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
xiaotao1311 天前
第九章:Vite API 参考手册
前端·vite·前端打包
午安~婉1 天前
Electron桌面应用聊天(续)
前端·javascript·electron
彧翎Pro1 天前
基于 RO1 noetic 配置 robosense Helios 32(速腾) & xsense mti 300
前端·jvm
小码哥_常1 天前
解锁系统设置新姿势:Activity嵌入全解析
前端
之歆1 天前
前端存储方案对比:Cookie-Session-LocalStorage-IndexedDB
前端
哟哟耶耶1 天前
vue3-单文件组件css功能(:deep,:slotted,:global,useCssModule,v-bind)
前端·javascript·css
是罐装可乐1 天前
深入理解“句柄(Handle)“:从浏览器安全到文件系统访问
前端·javascript·安全
华科易迅1 天前
Vue如何集成封装Axios
前端·javascript·vue.js
康一夏1 天前
Next.js 13变化有多大?
前端·react·nextjs