封装 vue 组件的过程记录
在我们使用vue的开发过程中总会遇到这样的场景,封装自己的业务组件。
封装页面组件前要考虑几个问题:
1、该业务组件的使用场景
2、在什么条件下展示一些什么数据,数据类型是什么样的,及长度颜色等
3、如果是通用的内容,比如ajax数据交互部分肯定是一个通用性的东西,怎么数据请求作到通用,返回的数据分配出去又不会出错。
先看一个简单的例子:
APP中常用的一个场景,点开我的信息右箭头可做编辑,修改。
从下面的图中可以看出来,修改页面大同小异,完全可以用一个页面,避免建多个页面。
这边采用的方式是,通过传参判断。
第一步:在data里面定义好一段数据格式,用来循环遍历展示的。
第二步:给右箭头绑定点击事件,点击的时候 传入当前点击的哪个的信息,也就是item。
第三步:通过路由等方式跳转到下一个页面,并把点击信息通过参数的形式带过去。
下面就是编辑页面,也就是当前场景下小小的通用的业务组件的实现过程了。
从代码中我的标记中不难看出,这里使用了3个formT ,为啥不是一个呢,因为虽说编辑修改页面大同小异,但是头像修改和文本信息修改的方式是存在一定去别的,
而电话、邮箱使用的是文本框就可以了,而个人简介确实大段文字,要使用,富文本框的。
1、思路是这样的,通过路径传过来的参数标识判断,是点击修改头像过来的就展示修改头像的内容,否则是修改个人简介的则展示个人简介的文本框,如果都不成立,就展示通用的结构。
2、首先第一步,结构上使用的 editflag 标识 写在 computed 计算属性里面,然后结构上使用该属性,属性里面的内容是返回的是 参数的标识,也就是 头像,还是个人简介还是其他的。
3、然后我们看editItem 是哪里来的,是事先定义好在data里面的属性。
4、然后看这个属性的赋值是哪里来的,发现使用了watch监听了数据变化,当数据变化时赋值来的,
5、再看下 currpdata 哪里来的,发现是从 mixin模板里面来的,
看到这里也就是 watch 了一下pdata
3、然后就是 点击完成的时候 调用 editUserInfo 方法 处理修改的内容逻辑了。
editUserInfo() { if (this.editflag == 'headImageSrc') { if (this.files && this.files.length > 0 && this.files[0].storageid) { this.$set(this.formdata, "l_brokerimage", this.files[0].storageid); } else { // if (!this.API.hsVerify.verifyNumber(this.formdata.l_brokerimage, "头像", null, "", 1)) { // return false; // } if (!this.formdata['l_brokerimage'] || this.formdata['l_brokerimage'] == '') { this.API.modal.toast({ message: "头像不能为空或未重新上传!", duration: 3 }); return false; } } } else if (this.editflag == 'brokername') { if (!this.formdata['c_brokername'] && this.formdata['c_brokername'] == '') { this.API.modal.toast({ message: "修改的名称不能为空哦!", duration: 3 }); return false; } } else if (this.editflag == 'mobile') { if (this.formdata['c_mobile'] && this.formdata['c_mobile'] != '') { var regMapMobile = /(^(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])\d{8}$)/; if (!regMapMobile.test(this.formdata['c_mobile'])) { this.API.modal.toast({ message: "只能是1开始的11位纯数字哦!", duration: 3 }); return false; } } else { this.API.modal.toast({ message: "修改的电话不能为空哦!", duration: 3 }); return false; } } else if (this.editflag == 'email') { if (this.formdata['c_email'] && this.formdata['c_email'] != '') { var regMapEmail = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9_]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/; if(this.formdata['c_email'].length > 40){ this.API.modal.toast({ message: "邮箱超出最大长度!", duration: 3 }); return false; } if (!regMapEmail.test(this.formdata['c_email'])) { this.API.modal.toast({ message: "邮箱格式不正确!", duration: 3 }); return false; } } else { this.API.modal.toast({ message: "修改的邮箱不能为空哦!", duration: 3 }); return false; } ; } this.hsHttp.ajax({ data: { "method": "exeCallBOWithRetNotWrapper", "_uc": "UC_SYSTEM_TMPDATA_SAVE", commdata: JSON.stringify(this.commdata), formdata: JSON.stringify(this.formdata) }, success: (data) => { let json = JSON.parse(data); if (json && json.success == "1") { if (this.editflag == 'headImageSrc') { if (this.files && this.files.length > 0 && this.files[0].storageid) { this.user.headImageSrc = this.API.getServer() + this.files[0].filesrc; } } else { this.user[this.editflag] = this.formdata[this.formproperty] } let chgJson = {}; chgJson[this.editflag] = this.user[this.editflag] this.postMessage("user.change", chgJson); this.API.hsBack(); } else { this.API.modal.toast({ message: "修改失败", duration: 3 }); } }, error: function (err) { console.log(err); } });}
暂时记录下。。。
转载于:https://www.cnblogs.com/sunshinedream/p/10396012.html
封装 vue 组件的过程记录相关推荐
- 简述封装vue组件的过程
组件可以提升整个项目的开发效率,能够把页面抽象成多个相对独立的模块,解决 了我们传统项目开发:效率低.难维护.复用性等问题. 分析需求:确定业务需求,把页面中可以复用的结构,样式以及功能,单独抽离成一 ...
- 封装Vue组件的原则及技巧
封装Vue组件的原则及技巧 Vue的组件系统 Vue组件的API主要包含三部分:prop.event.slot props表示组件接收的参数,最好用对象的写法,这样可以针对每个属性设置类型.默认值或自 ...
- Vue2组件封装 Vue组件封装
写在前面 虽然是Vue2组件封装,主要的内容是记录一下我对封装组件的一些要点和我的看法 --原学习视频来源于b站黑马从0到1封装组件库 什么是组件 都说Vue是组件化开发,确实有道理,别说按钮输入框这 ...
- 手把手教你封装 Vue 组件并使用 NPM 发布
Vue 开发插件 我们可以先查看Vue的插件的开发规范 我们开发的之后期望的结果是支持 import.require 或者直接使用 script 标签的形式引入,就像这样: ps: 这里注意一下包的名 ...
- VMware vSphere虚拟化-VMware ESXi 5.5组件安装过程记录
几种主要的虚拟化 ESXi是VMware公司研发的虚拟机服务器,ESXi已经实现了与Virtual Appliance Marketplace的直接整合,使用户能够即刻下载并运行虚拟设备.这为 即插即 ...
- vscode svn使用_使用Typescript封装Vue组件
一.搭建项目以及初始化配置 vue create ts_vue_btn 这里使用了vue CLI3自定义选择的服务,我选择了ts.stylus等工具.然后创建完项目之后,进入项目.使用快捷命令code ...
- 灵活的Vue组件——原来这么简单
本篇学习目标 能够理解vue组件概念和作用 能够掌握封装组件能力 能够使用组件之间通信 能够完成todo案例 1. vue组件 1.0_为什么用组件 以前做过一个折叠面板 需求: 现在想要多个收起展开 ...
- 【Vue知识点- No4.】vue组件、组件通信、Todo案例
知识点自测 this指向 let obj = {fn: function(){// this指向此函数的调用者},fn () {// this指向当前函数的调用者 (如果都是在vue里, this指向 ...
- vue组件_组件通信_todo案例
今日学习目标 能够理解vue组件概念和作用 能够掌握封装组件能力 能够使用组件之间通信 能够完成todo案例 1. vue组件 1.0_为什么用组件 以前做过一个折叠面板 [外链图片转存失败,源站可能 ...
最新文章
- C#一个事件中调用另一个事件
- SQL Server 2008 Analysis Services 多维数据库一步一步从入门到精通
- 一个简单的shell实例
- Logistic regression (逻辑回归) 概述
- 密位测距离口诀_电气故障怎么查?最新最全的79条电气故障诊断口诀
- c语言xc比较大小写,XCTestAPI文档.docx
- 干货 物联网卡使用9大常见问题解惑
- 数字图像处理 冈萨雷斯(第四版)图像分辨率及大小,灰度级变化的影响,以及邻接、连通、区域和边界笔记
- 聚类分析软件测试,文本聚类分析效果评价笔记 - hellominefriend的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- 计算机培训三下乡实践报告,大学生暑假三下乡社会实践报告优秀范文
- 苹果手机咋用计算机,苹果手机怎么通过usb连接电脑上网
- 开发者企业公司 邓白氏公司 D-U-N-S Number
- linux md5加密文件,linux md5 加密字符串和文件方法
- 电话拨键号码(DTMF信号)识别
- 技校可以学计算机平面设计吗,计算机平面设计免费试学服务为先_孙进技校
- html添加外链图片代码,web 外链图片 403 解决方案(http referrer)
- 摄像头网络直播方案LiveGBS部署问题
- kubernetes-v1.15.0安装【使用kubeadm部署Kubernetes-跳过国内网络问题】
- 现在完成时、过去完成时、完成进行时
- 【技术分享】如何通过PPPOE拨号上网
热门文章
- 关于text段、data段和bss段
- PE文件和COFF文件格式分析--MS-DOS 2.0兼容Exe文件段
- 海思3559A上编译Valgrind源码操作步骤
- 开发安卓app游戏_游戏陪玩系统APP开发平台
- Java学习总结:55(偶对象保存:Map接口)
- Java项目:农资采购销售系统(java+SSM+Easyui+maven+Mysql)
- 【java】兴唐第二十五节课(异常和log4j的使用)
- Error:java: 错误: 不支持发行版本 14
- 、|| 和 、| 的区别(详尽版)
- [微信小程序]时间戳转日期