IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue项目实际开发的问题及实用技巧分享(二) -> 正文阅读

[JavaScript知识库]vue项目实际开发的问题及实用技巧分享(二)

粗读整体项目将业务流程整体梳理了一遍,发现项目中很多“ES5老式代码”,当然我也不是说用ES5写法不行,会有BUG,只是会造成代码量增多,可读性变差。

这里就目前维护的项目里遇到的一些整理一下:

1、解构赋值在具体项目上的应用

<el-table-column label="操作" width="100" align='center'>
	<template slot-scope="scope">
		<div v-if="isSee">
             <el-button @click='handleClick(scope.row,scope.$index)'>编辑</el-button>			
        </div>
    </template>
</el-table-column>
<script>
export default {
    methods: {
        handleClick(row,index){
            let name = row.name,
                age = row.age,
                id = row.ID,
                leadName = row.lead.name,
                leadId =row.lead.id,
                leadCode =row.lead.code
        }
    }
}
</script>

这要是在业务中涉及到更多的参数那不是得定义更多的变量。

改进方案:

handleClick({name,age,ID:id,lead},index){
    let {name:leadName,id:leadId:,code:leadCode} =lead||{}
}

2、关于同参数多判断条件非常复杂的情况(使用ES6新增数组实例方法includes

<el-table-column prop="proAsk" label="产品工艺要求" align='center'>
	<template slot-scope="scope">
		<div v-if="isSee">
			<div class="tabel-input" v-if="scope.row.nameSort==4">
				<div
					v-if='scope.row.classSort==1||scope.row.classSort==2||scope.row.classSort==3||scope.row.classSort==5||scope.row.classSort==6||scope.row.classSort==7'>
					<el-form-item :prop="'tableDatas.'+scope.$index+'.proAsk'" :rules="rules.proAsk">
						<el-input v-model="scope.row.proAsk" center></el-input>
					</el-form-item>
				</div>
				<div v-else>
					<el-input v-model="scope.row.proAsk" center></el-input>
				</div>
			</div>
			<div class="tabel-input" v-else-if="scope.row.nameSort==5||scope.row.nameSort==6||scope.row.nameSort==8">
				<el-input v-model="scope.row.proAsk" center></el-input>
			</div>
			<div v-else>
				{{scope.row.proAsk}}
			</div>
		</div>
		<div v-else>
			{{scope.row.proAsk}}
		</div>
	</template>
</el-table-column>

这样写后来接手项目的人读起来会很难受,如果他继续加条件,这一块不得再加个好几十行

改进方案:

<el-table-column prop="proAsk" label="产品工艺要求" align='center'>
	<template slot-scope="scope">
		<div v-if="isSee">
			<div class="tabel-input" v-if="scope.row.nameSort==4">
				<div v-if='[1,2,3,5,6,7].includes(scope.row.classSort)'>
					<el-form-item :prop="'tableDatas.'+scope.$index+'.proAsk'" :rules="rules.proAsk">
						<el-input v-model="scope.row.proAsk" center></el-input>
					</el-form-item>
				</div>
				<div v-else>
					<el-input v-model="scope.row.proAsk" center></el-input>
				</div>
			</div>
			<div class="tabel-input" v-else-if="[5,6,8].includes(scope.row.nameSort)">
				<el-input v-model="scope.row.proAsk" center></el-input>
			</div>
			<div v-else>
				{{scope.row.proAsk}}
			</div>
		</div>
		<div v-else>
			{{scope.row.proAsk}}
		</div>
	</template>
</el-table-column>

3、模板字符串的应用

if (str1.length || str2.length) {
	if (str1.length) { //定价单位不一致
		let msgStr = str1.join(',')
		msgStr = '第' + msgStr + '行定价单位与所关联报价不一致'
		this.$message.error(msgStr)
        return
	}
	if(str2.length){//材质校验不一致
		let msgStr2=str2.join(',')
		msgStr2='第'+msgStr2+'行材质与所关联报价不一致'	
		this.$message.error(msgStr2)
        return
	}
}

模板字符串可以直接使用表达式,就不需要额外创建这些变量了

改进方案:

if (str1.length || str2.length) {
	if (str1.length) { //定价单位不一致
		this.$message.error(`第 ${str1.join(',')}行定价单位与所关联报价不一致`)
	}
	if(str2.length){//材质校验不一致
		this.$message.error(`第${str2.join(',')}行材质与所关联报价不一致`)
	}
    return
}

4、删除列表选中数据

<template>
	<el-row>
		<el-col :span="24" style="height: 40px;" v-show="!isSee">
			<el-button  size="mini" type="text" @click='addTable'>增加</el-button>
			<el-button size="mini" type="text" @click='delTableRow'>删除</el-button>
			<el-button size="mini" type="text" @click='selectAll'>全选</el-button>
			<el-button size="mini" type="text" @click='delTableChose'>取消全选</el-button>
		</el-col>

		<el-col :span="22">
			<el-table ref="multipleTable" border :data="tableData" max-height='300' show-summary size='mini'
				tooltip-effect="dark" style="width: 100%" @selection-change="handleSelectionChange">
				<el-table-column type="selection" width="55" align="center" v-if="!isSee">
				</el-table-column>
				<el-table-column label="行项目" width="70" align="center" fixed="left">
					<template slot-scope="scope">
						{{ scope.row.od }}
					</template>
				</el-table-column>
				<el-table-column label="产品名称" width="100" align="center" prop="productName" fixed="left">
					<template slot-scope="scope">
						<div class="tabel-input">
							<el-input v-model="scope.row.productName" :disabled="isSee" center placeholder="产品名称">
							</el-input>
						</div>
					</template>
				</el-table-column>
				<el-table-column label="材质" width="160" align="center" prop="material" fixed="left" />
			</el-table>
		</el-col>
	</el-row>
</template>
<script>
	export default {
		data() {
			return {
				choseData: [],
				tableData: [],
				isSee: false
			}
		},
		methods: {
			handleSelectionChange(arr) {
				this.choseData = arr
			},
			delTableChose() {
				this.$refs.multipleTable.clearSelection();
			},
			// 设置全选
			selectAll() {
				this.tableData.forEach((obj) => {
					this.$refs.multipleTable.toggleRowSelection(obj, true)
				})
			},
            //新增行数据
			addTable() {
				let data = {
					'od': this.tableData.length + 1, //序号
					"addition": "",
					"productName": "",
					"material": "",
				}			
				this.tableData.push(data)
			},
			// 删除行数据
			delTableRow() {
				let arr2 = this.tableData,
					arr1 = this.choseData
				for (var i = 0; i < arr2.length; i++) {
					for (var j = 0; j < arr1.length; j++) {
						if (arr2[i].od == arr1[j].od) {
							arr2.splice(i, 1);
						}
					}
				}
				this.tableData = arr2
				this.changeData()
			},
		}
	}
</script>

这里会存在的问题是od项是自定义的数值,所以会出现多个条目od值一样的情况(删除后再添加),需要在删除之后对该数组od值重排

改进方案:

delTableRow() {
	let arr1 = this.tableData,
		arr2 = this.choseData,
		newArr = []
	// 遍历两个数组,并判断数值是否相等,如果相等,就将空字符串赋值给该数值
	newArr = arr1.filter(items => {
		if (!arr2.includes(items)) return items;
	})
	newArr.forEach((i, j) => {
		i.od = j + 1
	})
	this.tableData = newArr
	this.changeData()
}

当然了,这些技能可能原本的方式也能处理相应的业务逻辑,我给大家讲这些方案的目的是让大家学以致用,为什么面试都要问ES6,CSS3,HTML5,随着技术的不断更迭,作为技术人员的我们不说永远走在技术前沿,最起码也不能落后太多吧!

最后总结一下,学习学习,讲的是先求学然后要习练,理论知识掌握得不论多到位,不去练习到了实际应用中还是不会。什么是学知识,那是要长年累月地磨炼,不是光会看秘籍就能成为武林高手的,正真的高手的身上全是伤,手上全是茧。所以,不管是学习还是我们的生活,其实都是一个不断练习巩固知识的过程,最终通过这些经验来面对生活和工作中随时会出现的各种问题,难的不是生活和工作,难的是如何去面对生活和工作!

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:05:12  更:2022-09-13 11:06:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:56:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码