封装 vue 组件的过程记录

news/2024/7/3 6:10:35

在我们使用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


http://lihuaxi.xjx100.cn/news/236195.html

相关文章

只需3分钟,就能轻松创建 一个SpreadJS的React项目

概述SpreadJS 纯前端表格控件 V11.2(SP2) 已经全面支持了 React 的拓展。接下来我们看下如何利用3分钟快速创建一个 SpreadJS 的 React 项目。1.新建React 项目(耗时 1 Min)直接运行:npx create-react-app react-spread-sheets还不清楚什么是…

streptavidin-PEG-TRITC 链霉亲和素-聚乙二醇-四甲基罗丹明

产品名称:链霉亲和素-聚乙二醇-四甲基罗丹明 英文名称:streptavidin-PEG-TRITC 纯度:95% 存储条件:-20C,避光,避湿 外观:固体或粘性液体,取决于分子量 PEG分子量可选:350、550、750、…

计算机设备管理器不显示com,台式机设备管理器打开是空白怎么办_win10设备管理无法显示解决方法...

2015-06-15 14:08:22  浏览量:2252win7设备管理器空白怎么办?最近有用户反馈打开设备管理器的时候,发现win7设备管理器显示空白,该怎么处理这个问题?下面跟随小编脚步一起看看win7系统打开设备管理器空白的解决方法。…

安利Mastodon:属于未来的社交网络

我为Mastodon开发了一款安卓客户端,v1.0版本已经发布,欢迎下载使用 源码在这里:https://github.com/shuiRong/Gakki ??? 正文 Mastodon(长毛象)是什么? 是一个免费开源、去中心化、分布式的微博客社交网络,是微博、…

OSS正式支持IPv6公测

背景 6月20日阿里云宣布全面支持IPv6, 随后阿里云开放对象存储OSS也逐步开始向用户公测。 公测步骤 正常使用IPv6服务,除了OSS端支持还需要客户端支持,我们做一些检查证明客户端具备访问 IPv6的能力,再使用OSS SDK或工具通过IPv6 …

计算机审计 pdf,计算机审计第三章作业.pdf

1. 审计软件的审计实施阶段前,包括哪些内容?答: a. 项目管理b. 数据准备c. 审计准备2. 新建审计项目时,在“项目登记”界面里,在定义‘审计时限范围’时,可以创建多年度数据时间吗?答&#xff1…

lsmod命令详解

基础命令学习目录首页 原文链接:http://blog.sina.com.cn/s/blog_e6b2465d0101fuev.html lsmod——显示已载入系统的模块 lsmod 其实就是list modules的缩写,即 列出所有模块. 功能说明:显示已载入系统的模块。 语法:lsmod 说明&a…

给女友讲讲设计模式——适配器模式(JAVA实例)5

前言 有这样一个人,看到别人一个个开餐馆赚了好多钱,于是自己也很想在餐饮业这方面大展拳脚,他从别人那里学到了他们的理念,还学习到了他们真正开店的经验。不但如此,他还引进了除了吃饭意外其他的服务,例如…