在我们使用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 组件的过程记录相关推荐

  1. 简述封装vue组件的过程

    组件可以提升整个项目的开发效率,能够把页面抽象成多个相对独立的模块,解决 了我们传统项目开发:效率低.难维护.复用性等问题. 分析需求:确定业务需求,把页面中可以复用的结构,样式以及功能,单独抽离成一 ...

  2. 封装Vue组件的原则及技巧

    封装Vue组件的原则及技巧 Vue的组件系统 Vue组件的API主要包含三部分:prop.event.slot props表示组件接收的参数,最好用对象的写法,这样可以针对每个属性设置类型.默认值或自 ...

  3. Vue2组件封装 Vue组件封装

    写在前面 虽然是Vue2组件封装,主要的内容是记录一下我对封装组件的一些要点和我的看法 --原学习视频来源于b站黑马从0到1封装组件库 什么是组件 都说Vue是组件化开发,确实有道理,别说按钮输入框这 ...

  4. 手把手教你封装 Vue 组件并使用 NPM 发布

    Vue 开发插件 我们可以先查看Vue的插件的开发规范 我们开发的之后期望的结果是支持 import.require 或者直接使用 script 标签的形式引入,就像这样: ps: 这里注意一下包的名 ...

  5. VMware vSphere虚拟化-VMware ESXi 5.5组件安装过程记录

    几种主要的虚拟化 ESXi是VMware公司研发的虚拟机服务器,ESXi已经实现了与Virtual Appliance Marketplace的直接整合,使用户能够即刻下载并运行虚拟设备.这为 即插即 ...

  6. vscode svn使用_使用Typescript封装Vue组件

    一.搭建项目以及初始化配置 vue create ts_vue_btn 这里使用了vue CLI3自定义选择的服务,我选择了ts.stylus等工具.然后创建完项目之后,进入项目.使用快捷命令code ...

  7. 灵活的Vue组件——原来这么简单

    本篇学习目标 能够理解vue组件概念和作用 能够掌握封装组件能力 能够使用组件之间通信 能够完成todo案例 1. vue组件 1.0_为什么用组件 以前做过一个折叠面板 需求: 现在想要多个收起展开 ...

  8. 【Vue知识点- No4.】vue组件、组件通信、Todo案例

    知识点自测 this指向 let obj = {fn: function(){// this指向此函数的调用者},fn () {// this指向当前函数的调用者 (如果都是在vue里, this指向 ...

  9. vue组件_组件通信_todo案例

    今日学习目标 能够理解vue组件概念和作用 能够掌握封装组件能力 能够使用组件之间通信 能够完成todo案例 1. vue组件 1.0_为什么用组件 以前做过一个折叠面板 [外链图片转存失败,源站可能 ...

最新文章

  1. C#一个事件中调用另一个事件
  2. SQL Server 2008 Analysis Services 多维数据库一步一步从入门到精通
  3. 一个简单的shell实例
  4. Logistic regression (逻辑回归) 概述
  5. 密位测距离口诀_电气故障怎么查?最新最全的79条电气故障诊断口诀
  6. c语言xc比较大小写,XCTestAPI文档.docx
  7. 干货 物联网卡使用9大常见问题解惑
  8. 数字图像处理 冈萨雷斯(第四版)图像分辨率及大小,灰度级变化的影响,以及邻接、连通、区域和边界笔记
  9. 聚类分析软件测试,文本聚类分析效果评价笔记 - hellominefriend的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  10. 计算机培训三下乡实践报告,大学生暑假三下乡社会实践报告优秀范文
  11. 苹果手机咋用计算机,苹果手机怎么通过usb连接电脑上网
  12. 开发者企业公司 邓白氏公司 D-U-N-S Number
  13. linux md5加密文件,linux md5 加密字符串和文件方法
  14. 电话拨键号码(DTMF信号)识别
  15. 技校可以学计算机平面设计吗,计算机平面设计免费试学服务为先_孙进技校
  16. html添加外链图片代码,web 外链图片 403 解决方案(http referrer)
  17. 摄像头网络直播方案LiveGBS部署问题
  18. kubernetes-v1.15.0安装【使用kubeadm部署Kubernetes-跳过国内网络问题】
  19. 现在完成时、过去完成时、完成进行时
  20. 【技术分享】如何通过PPPOE拨号上网

热门文章

  1. 关于text段、data段和bss段
  2. PE文件和COFF文件格式分析--MS-DOS 2.0兼容Exe文件段
  3. 海思3559A上编译Valgrind源码操作步骤
  4. 开发安卓app游戏_游戏陪玩系统APP开发平台
  5. Java学习总结:55(偶对象保存:Map接口)
  6. Java项目:农资采购销售系统(java+SSM+Easyui+maven+Mysql)
  7. 【java】兴唐第二十五节课(异常和log4j的使用)
  8. Error:java: 错误: 不支持发行版本 14
  9. 、|| 和 、| 的区别(详尽版)
  10. [微信小程序]时间戳转日期