设计模式 策略模式 场景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.xdnf.cn/news/1934.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

mysql 8.0.39 Caused by: java.sql.SQLException: Illegal mix of collations 异常解决

java服务可以正常启动&#xff0c;页面发现查询报错Illegal mix of collations 报错信息&#xff1a; ### Cause: java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,COERCIBLE) and (utf8mb4_0900_ai_ci,COERCIBLE) for operation ; uncategorized SQ…

C++友元类的分文件编写

在学习C的关于友元类的知识时&#xff0c;网课例程中是在main函数文件中编写实现&#xff0c;但是我们知道&#xff0c;一般情况下&#xff0c;类以及类的成员函数实现都是在不同文件中实现的&#xff0c;因此&#xff0c;我们会自然的想到友元类是如何在不同文件下编写实现的&…

vue2与vue3生命周期差异整理

1、vue3 与 vue2 生命周期对比 生命周期整体分为四个阶段&#xff0c;分别是&#xff1a;创建、挂载、更新、销毁&#xff0c;每个阶段都有两个钩子&#xff0c;一前一后。 生命周期Vue 2Vue 3说明创建阶段beforeCreatesetup开始创建组件之前,实例被创建&#xff0c;还没有初…

c语言之在结构体里面定义函数指针

还是在看redis3.0源码的时候&#xff0c;遇到如下问题&#xff1a; 这个时候我们回到list这个结构体的设计上面 首先我们必须要注意的是函数名字就可以看成指针地址。 所以下面我们写一个简单的实例看一下具体的用法&#xff1a; #include <stdio.h> #include <stdl…

代码随想录一刷——1.两数之和

当我们需要查询一个元素是否出现过&#xff0c;或者一个元素是否在集合里的时候&#xff0c;就要第一时间想到哈希法。 C&#xff1a; unordered_map class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int…

EDA二维码生成工具 V1.2

EDA二维码生成工具用于在原理图、PCB环境中生成矢量二维码&#xff0c;具有生成速度快、生成效率高的特点&#xff0c;支持中文字符、英文字符生成。 此工具可直接输出在原理图、原理图库文档、PCB、PCB库文档中&#xff0c;可同时输出多种格式&#xff0c;可在Altium …

鸿蒙生态崛起带来的机遇与挑战

目录 1.概述 2.生态崛起 2.1.鸿蒙生态的认知和了解 2.2.鸿蒙生态的崛起分析 2.3.开发者的机遇 2.4.华为开发者大会 3.鸿蒙生态开发的挑战 3.1.开发工具 3.2.技术难度 3.3.生态竞争 3.4.抓住机遇、应对挑战 4.鸿蒙生态未来发展趋势 4.1.发展趋势 4.2.18N 4.3.开发…

JavaCV 图像边缘检测 之 Sobel算子 算法

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

二百七十四、Kettle——ClickHouse中对错误数据表中进行数据修复(实时)

一、目的 在完成数据清洗、错误数据之后&#xff0c;需要根据修复规则对错误数据进行修复 二、Hive中原有代码 insert into table hurys_db.dwd_queue partition(day) selecta3.id,a3.device_no,a3.source_device_type,a3.sn,a3.model,a3.create_time,a3.lane_no,a3.lane_…

第2章 Android App开发基础

第 2 章 Android App开发基础 bilibili学习地址 github代码地址 本章介绍基于Android系统的App开发常识&#xff0c;包括以下几个方面&#xff1a;App开发与其他软件开发有什么不一 样&#xff0c;App工程是怎样的组织结构又是怎样配置的&#xff0c;App开发的前后端分离设计…

ARM base instruction -- csetm

Conditional Set Mask sets all bits of the destination register to 1 if the condition is TRUE, and otherwise sets all bits to 0. 如果条件为TRUE&#xff0c;则条件设置掩码将目标寄存器的所有位设置为1&#xff0c;否则将所有位设为0。 32-bit variant Applies w…

rom定制系列------小米8青春版定制安卓14批量线刷固件 原生系统

&#x1f49d;&#x1f49d;&#x1f49d;小米8青春版。机型代码platina。官方最终版为 12.5.1安卓10的版本。客户需要安卓14的固件以便使用他们的软件。根据测试&#xff0c;原生pixeExpe固件适配兼容性较好。为方便客户批量进行刷写。修改固件为可fast批量刷写。整合底层分区…

java项目之校园资料分享平台(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园资料分享平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 校园资料分享平台的主要…

Jmeter5.X性能测试

Jmeter5.X性能测试 文章目录 Jmeter5.X性能测试一、掌握Http基础协议1.1 浏览器的B/S架构和C/S架构1.2 HyperText Transfer Protocol 超文本传输协议1.3 超文本传输协议Http消息体拆分讲解1.4 HTTP的九种请求方法和响应码介绍1.5 Http请求头/响应头1.6 Http常见请求/响应头cont…

qt管理系统框架(好看界面、漂亮界面、好看的界面、漂亮的界面)

概述 最近一个项目用QT开发&#xff0c;然后找了美工帮设计了下界面。总算完工&#xff0c;后想一下干脆抽出一个基础框架&#xff0c;方便以后用。 功能 支持mysql、echarts。 支持加载动态权限菜单&#xff0c;轻松权限控制。 支持遮罩对话框、抽屉 支持开机启动动画界面 内…

力扣——相同的树(C语言)

1.题目&#xff1a; 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 2.原理&#xff1a; 这里直接将两个数的结点进行比较&#xff0c;向下递归&…

2024年双11买什么东西划算?2024年双十一必买清单好物大总结

双十一购物节&#xff0c;海量商品与诱人折扣并存&#xff0c;正是我们精打细算、理性消费的好时机。面对琳琅满目的爆款与折扣&#xff0c;记得先问问自己&#xff1a;这真的是我需要的吗&#xff1f;在日常中能否发挥其价值&#xff1f;基于这样的考量&#xff0c;我们精选了…

机器学习入门指南:从基础到实践

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 机器学习入门指南&#xff1a;从基础到实践 机器学习入门指南&#xff1a;从基础到实践 机器学习入门指南&#xff1a;从基础到实…

通义灵码实操—飞机大战游戏

通义灵码实操—飞机大战游戏 有没有想象过自己独立编写一个有趣的小游戏。在本实践课程中&#xff0c;你不仅可以实现这个想法&#xff0c;而且还将得到通义灵码智能编程助手的支持与指导。我们将携手步入编程的神奇世界&#xff0c;以一种简洁、高效且具有创造性的方式&#…

react-router与react-router-dom的区别

写法上的区别&#xff1a; 写法1: import {Swtich, Route, Router, HashHistory, Link} from react-router-dom;写法2: import {Switch, Route, Router} from react-router; import {HashHistory, Link} from react-router-dom;react-router实现了路由的核心功能 react-router-…