设计模式 策略模式 场景Vue (技术提升)

  策略模式 (建议复制编辑器查看更佳)

    在给定的 Vue.js 组件代码中,根据optionKey的不同值,展示了不同的表单内容并定义了不同的表单验证规则。在这里,optionMap对象内部定义了不同的策略(addAccount、editAccount、editPassword),每个策略包含了不同的表单类型列表和表单验证规则。根据当前的optionKey值,页面会展示相应的表单内容,并应用相应的验证规则。这样的设计允许在不同的场景下使用不同的策略,而无需修改主要的逻辑。这种方式带来了可扩展性和易维护性,当您需要添加新的表单类型或不同的验证规则时,只需简单地往optionMap对象内添加新的策略即可。

应用场景: 我们可以先写好多个不同的表单类型和验证规则,然后根据不同的场景我们可以直接通过策略分配,通过组合不同的表单项目从而搭建不一样的表单集合,以及可以根据场景的不同调用不同的校验规则。

优点:这样的设计允许在不同的场景下使用不同的策略,而无需修改主要的逻辑。这种方式带来了可扩展性和易维护性,使得代码更具有扩展性和灵活性,当您需要添加新的表单类型或不同的验证规则时,只需简单地往optionMap对象内添加新的策略即可。

栗子

VueDOM结构

    <!-- optionMap[optionKey].title:是标题 --><!-- optionMap[optionKey].formRules:校验规则 --><!-- optionMap[optionKey].formRules:校验规则 --><!-- optionMap[optionKey].typeList: 是否显示对应的权限组 可以进行自由搭配--><!-- 思路就是: 根据点击事件动态设置optionKey的状态 然后去取对应策略 -->
<el-dialog destroy-on-close v-model="dialogVisible" :title="optionMap[optionKey].title" width="500"@close="resetForm(formRef)"><el-form ref="formRef" style="max-width: 600px" :rules="optionMap[optionKey].formRules" :model="userForm"label-width="auto" class="demo-ruleForm"><el-form-item v-if="optionMap[optionKey].typeList.includes('姓名')" label="姓名" prop="nickName"><el-input v-model.trim="userForm.nickName" type="text" placeholder="请输入姓名" show-word-limitmaxlength="20" /></el-form-item><el-form-item v-if="optionMap[optionKey].typeList.includes('账户')" label="账户" prop="userName"><el-input v-model.trim="userForm.userName" type="text" placeholder="请输入账户" show-word-limitmaxlength="20"><template #prepend></template></el-input></el-form-item><el-form-item v-if="optionMap[optionKey].typeList.includes('新密码')" label="新密码" prop="password"><el-input v-model.trim="userForm.password" type="text" placeholder="请输入新密码" /></el-form-item><el-form-item v-if="optionMap[optionKey].typeList.includes('确认密码')" label="确认密码" prop="conPassword"><el-input v-model.trim="userForm.conPassword" type="password" placeholder="请确认密码" /></el-form-item><el-form-item v-if="optionMap[optionKey].typeList.includes('手机号')" label="手机号" prop="phonenumber"><el-input v-model.trim="userForm.phonenumber" type="iPhone" placeholder="请输入手机号" /></el-form-item><el-form-item v-if="optionMap[optionKey].typeList.includes('备注')" label="备注" prop="remark"><el-input v-model.trim="userForm.remark" show-word-limit rows="4" resize="none" type="textarea"maxlength="200" placeholder="请输入备注" /></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button class="butClass" @click="submitForm(formRef, optionMap[optionKey].title)">确定</el-button><el-button @click="resetForm(formRef)">取消</el-button></div></template></el-dialog>

JS策略 

  const optionKey = ref('addAccount');const optionMap: any = {addAccount: {title: '添加账户',typeList: ['姓名', '账户', '新密码', '手机号', '备注'],formRules: {userName: [{ required: true, message: '账户必填', trigger: 'blur' },{ required: true, validator: validateAccount, trigger: 'blur' }],nickName: [{ required: true, message: '姓名必填', trigger: 'blur' }],password: [{ required: true, message: '密码必填', trigger: 'blur' },{ required: true, validator: validateInput, trigger: 'blur' }],phonenumber: [{ required: true, message: '手机号必填', trigger: 'blur' },{ required: true, validator: validatePhoneNumber, trigger: 'blur' }],},},editAccount: {title: '修改账户',typeList: ['姓名', '账户', '手机号', '备注'],formRules: {userName: [{ required: true, message: '账户必填', trigger: 'blur' },{ required: true, validator: validateAccount, trigger: 'blur' }],nickName: [{ required: true, message: '姓名必填', trigger: 'blur' }],phonenumber: [{ required: true, message: '手机号必填', trigger: 'blur' },{ required: true, validator: validatePhoneNumber, trigger: 'blur' }],},},editPassword: {title: '修改密码',typeList: ['新密码', '确认密码'],formRules: {password: [{ required: true, message: '密码必填', trigger: 'blur' },{ required: true, validator: validateInput, trigger: 'blur' }],conPassword: [{ required: true, validator: validatePass, message: '两次密码不一样' }],},},};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

万字长文详解Hive聚合函数 grouping sets、cube、rollup原理、语法、案例和优化

目录 原理与语法 使用场景 多维度报表生成 复杂的数据分析 实际案例 原理与语法 与GROUPINGSETS的区别 实际案例 原理与语法 与CUBE的对比 实际案例 执行效率比较 优化建议 Hive提供了三个强大的高级聚合函数: GROUPING SETS 、 CUBE 和 ROLLUP ,用于处理复杂的…

长短期记忆网络(LSTM)如何在连续的时间步骤中处理信息

长短期记忆网络&#xff08;LSTM&#xff09;如何在连续的时间步骤中处理信息 长短期记忆网络&#xff08;LSTM&#xff09;是一种高级的循环神经网络&#xff08;RNN&#xff09;&#xff0c;设计用来解决传统RNN在处理长时间序列数据时遇到的梯度消失或爆炸问题。LSTM通过其…

Spring @RequestMapping 注解

文章目录 Spring RequestMapping 注解一、引言二、RequestMapping注解基础1、基本用法2、处理多个URI 三、高级用法1、处理HTTP方法2、参数和消息头处理 四、总结 Spring RequestMapping 注解 一、引言 在Spring框架中&#xff0c;RequestMapping 注解是构建Web应用程序时不可…

飞牛OS在Docker中安装ODOO ERP系统

从后台的Docker镜像库安装一直报错误&#xff0c;无法安装成功&#xff0c;使用以下命令进入OS系统&#xff0c;以下是执行脚本: Start a PostgreSQL server $ docker run -d -e POSTGRES_USERodoo -e POSTGRES_PASSWORDodoo -e POSTGRES_DBpostgres --name db postgres:15 S…

cookie、session、http简单理解

Cookie:以key-value键值对的形式存储一些文本信息数据 并将数据保存在客户端(浏览器) sessionid&#xff08;身份&#xff09; 数据库中有一个seesion表&#xff0c;存放着所有的Session数据&#xff0c; 而sessionid就对应数据库数据这个id&#xff0c;服务器找到对应id的Ses…

VLAN间通信以及ospf配置

目录 1.基础知识介绍 1.1 什么是VLAN&#xff1f; 1.2 VLAN有什么用&#xff1f; 1.3 不同VLAN如何实现通信&#xff1f; 1.4 什么是路由汇总&#xff1f; 1.4.1 路由汇总的好处&#xff1a; 2. 实验 2.1 网络拓扑设计 2.2 实验配置要求 2.2.1 三层交换配置&#xff…

Redis的数据结构

一、Redis概述 Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。与MySQL数据库不同的是&a…

十四届蓝桥杯STEMA考试Python真题试卷第二套第一题

来源&#xff1a;十四届蓝桥杯STEMA考试Python真题试卷第二套编程第一题 题目描述&#xff1a; 给定一个字符串&#xff0c;输出字符串中最后一个字符。 输入描述&#xff1a; 输入一个字符串 输出描述&#xff1a; 输出字符串中最后一个字符 样例输入&#xff1a; hgf 样…

Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景

Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景 简介 Spring Boot 是一个基于 Spring 框架的简化开发框架,它旨在简化 Spring 应用的初始搭建和开发过程。Spring Boot 提供了一系列的注解,使得开发者可以更加方便地进行应用开发和配置。本文将详细介绍 S…

C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(4)

8.1、实现分区 在模块接口分区文件中不需要声明分区&#xff0c;也可以在模块实现分区文件中进行声明&#xff0c;在一个以.cpp为扩展名的正常源代码文件中&#xff0c;在这种情况下&#xff0c;它是一个实现分区&#xff0c;有时候叫内部分区。这样的分区无法导出&#xff0c;…

随着 AI 技术的不断发展,AI大模型正随着 AI 技术的不断发展,AI大模型正

随着 AI 技术的不断发展&#xff0c;AI大模型正在重塑软件开发流程&#xff0c;从代码自动生成到智能测试&#xff0c;未来&#xff0c;AI 大模型将会对软件开发者、企业&#xff0c;以及整个产业链都产生深远的影响。欢迎与我们一起&#xff0c;从 AI 大模型的定义、应用场景、…

数组对象常用方法合集

1、运算扩展符 ES6通过扩展元素符<font style"color:rgb(71, 101, 130);">...</font>&#xff0c;好比 <font style"color:rgb(71, 101, 130);">rest</font> 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的参数序列 conso…

MATLAB基础应用精讲-【数模应用】平均绝对误差损失 Mean Absolute Error Loss(附python、R语言和MATLAB代码实现)

目录 前言 几个高频面试题目 RMSE与MAE对比 平均绝对误差和均方误差(L1&L2)比较 MAE与MSE的性质对比 2.1 敏感度 2.2 单位与解释 2.3 数学特性 优缺点分析 3.1 MAE的优缺点 3.2 MSE的优缺点 应用场景 4.1 MAE的应用 4.2 MSE的应用 均方根误差和平均绝对误差的…

SQL Server身份验证模式

SQL Server是一个广泛使用的关系数据库管理系统&#xff0c;通常使用两种身份验证模式&#xff1a;Windows身份验证和SQL Server身份验证。理解这些身份验证方式的概念与更改方式的操作&#xff0c;对于数据库管理员和开发者至关重要。本文将详细介绍身份验证方式的概念以及如何…

基于Spring Boot的信息学科平台系统开发指南

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于保密信息学科平台系统的相关信息成为必…

ArcGIS005:ArcMap常用操作101-150例动图演示

摘要&#xff1a;本文涵盖了GIS软件操作的多方面内容&#xff0c;包括地图文档的新建、打开、保存及版本兼容性处理&#xff1b;错误与警告的查阅及帮助文档的使用技巧&#xff1b;地图打印比例尺的调整与地图信息的完善&#xff1b;图层操作的撤销与恢复&#xff0c;界面元素的…

从零开始的c++之旅——继承

1. 继承 1.继承概念及定义 继承是面向对象编程的三大特点之一&#xff0c;它使得我们可以在原有类特性的基础之上&#xff0c;增加方法 和属性&#xff0c;这样产生的新的类&#xff0c;称为派生类。 继承 呈现了⾯向对象程序设计的层次结构&#xff0c;以前我们接触的…

【学习】软件测试中V模型、W模型、螺旋模型三者介绍

在软件工程的星辰大海之中&#xff0c;存在着三种独特的航路图&#xff1a;V模型、W模型以及螺旋模型。它们分别以各自的方式描绘了软件开发与测试的不同旅程。 首先映入眼帘的是V模型——一个以垂直线条贯穿始终的简洁图形。这个模型如同一座倒立的“V”字形山峰&#xff0c;…

SpringMVC笔记 一万字

此笔记来自于B站尚硅谷 文章目录 一、SpringMVC 简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式&#xff1a;warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求…

Redis 分布式锁:原理、实现及最佳实践

随着现代互联网应用的不断发展&#xff0c;系统架构从单体应用逐步演变为分布式系统。为了保证分布式系统中的资源不被多个节点同时访问&#xff0c;确保数据的一致性和系统的稳定性&#xff0c;分布式锁的应用变得尤为重要。Redis 作为一个高性能的内存数据库&#xff0c;凭借…