【Element】Vue+Element表单校验详解

Element表单校验

作为一个后端开发,总结一下实际工作中表单校验的场景和用法。
Element官网:https://element.eleme.cn/#/zh-CN/component/form
代码地址:https://gitee.com/kkmy/kw-microservices/tree/master/kw-ui/kwsphere

常用表单校验场景

  • 表单基本校验(长度、非空、数字类型、金额类型)
  • 嵌套对象校验 (字段较多,存在嵌套对象,使用同一个el-form)
  • 字段联动校验 (审核场景,同意则审核意见置为非必输)
  • 自定义校验函数 (金额类型的长度校验,身份满18岁校验)
  • 重置表单、校验指定表单、校验指定字段(element表单常用方法)
  • 动态列表表单(添加多条配置)
  • 文件校验 (element上传组件)
  • 多表单el-form提交校验

场景使用Demo

表单基本校验

在这里插入图片描述

<template><div class="container"><div class="center-container"><el-form :model="userForm" :rules="rules" ref="userForm" label-width="100px"class="demo-userForm"><el-form-item label="姓名" prop="name"><el-input v-model="userForm.name"></el-input></el-form-item><el-form-item label="性别" prop="gender"><el-radio-group v-model="userForm.gender"><el-radio label=""></el-radio><el-radio label=""></el-radio></el-radio-group></el-form-item><!--中国行政区划代码:https://www.mca.gov.cn/n156/n186/c110746/content.html--><el-form-item label="籍贯" prop="nativePlace"><el-select v-model="userForm.nativePlace" placeholder="请选择性别"><el-option value="110000" label="北京市"></el-option><el-option value="120000" label="天津市"></el-option></el-select></el-form-item><el-form-item label="管理员" prop="admin"><el-switch v-model="userForm.admin"></el-switch></el-form-item><el-form-item label="爱好" prop="hobby"><el-checkbox-group v-model="userForm.hobby"><el-checkbox label="骑行" name="hobby"></el-checkbox><el-checkbox label="跑步" name="hobby"></el-checkbox><el-checkbox label="网游" name="hobby"></el-checkbox><el-checkbox label="旅行" name="hobby"></el-checkbox></el-checkbox-group></el-form-item><el-form-item label="个性签名" prop="desc"><el-input type="textarea" v-model="userForm.desc"></el-input></el-form-item><el-form-item><el-button type="primary" @click="submitForm('userForm')">保 存</el-button><el-button @click="resetForm('userForm')">重 置</el-button></el-form-item></el-form></div><el-dialogtitle="提示":visible.sync="centerDialogVisible"width="30%"@close="closeDialog":close-on-click-modal="false":close-on-press-escape="false"center><span><pre>{{userForm}}</pre></span><span slot="footer" class="dialog-footer"><el-button @click="centerDialogVisible = false">取 消</el-button><el-button type="primary" @click="centerDialogVisible = false">确 定</el-button></span></el-dialog></div>
</template><script>
export default {name: "validate-01",data() {return {userForm: {name: '',nativePlace: '',admin: false,hobby: [],gender: '',desc: ''},rules: {name: [{required: true, message: '请输入姓名', trigger: ['blur', 'change']},{min: 2, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur'}],nativePlace: [{required: true, message: '请选择籍贯', trigger: 'blur'}],hobby: [{type: 'array', required: true, message: '请至少选择一个爱好', trigger: 'change'},{type: 'array', min: 2, message: '请至少选择2个爱好', trigger: 'change'},],gender: [{required: true, message: '请选择性别', trigger: 'change'}],desc: [{required: true, message: '请填写个性签名', trigger: 'blur'},{max: 200, message: '个性签名长度不能大于200', trigger: 'blur'},]},centerDialogVisible: false,};},methods: {closeDialog() {this.centerDialogVisible = false;this.$refs.userForm.resetFields();},submitForm(formName) {this.$refs.userForm.validate((valid) => {if (valid) {this.centerDialogVisible = true;} else {console.log('error submit!!');return false;}});},resetForm(formName) {//this.$refs[formName].resetFields();this.$refs.userForm.resetFields();}}
}
</script><style scoped>
.container {display: flex;justify-content: center;align-items: center;height: 100vh; /* 设置父容器的高度为视口高度,使其充满整个屏幕 */
}.center-container {max-width: 600px; /* 设置内部容器的最大宽度,根据需求进行调整 */
}
</style>

嵌套对象校验

在这里插入图片描述
在这里插入图片描述

<template><div class="container"><div class="center-container"><el-form :model="userForm" :rules="rules" ref="userForm" label-width="100px"class="demo-userForm"><span>基本信息:</span><br><el-form-item label="姓名" prop="name"><el-input v-model="userForm.name"></el-input></el-form-item><el-form-item label="性别" prop="gender"><el-radio-group v-model="userForm.gender"><el-radio label=""></el-radio><el-radio label=""></el-radio></el-radio-group></el-form-item><el-form-item label="籍贯" prop="nativePlace"><el-select v-model="userForm.nativePlace" placeholder="请选择性别"><el-option value="110000" label="北京市"></el-option><el-option value="120000" label="天津市"></el-option></el-select></el-form-item><span>联系方式:</span><br><el-form-item label="QQ" prop="contactDetails.qq"><el-input v-model="userForm.contactDetails.qq"></el-input></el-form-item><el-form-item label="微信" prop="contactDetails.wx"><el-input v-model="userForm.contactDetails.wx"></el-input></el-form-item><el-form-item label="手机号" prop="contactDetails.phone"><el-input v-model="userForm.contactDetails.phone"></el-input></el-form-item><el-form-item><el-button type="primary" @click="submitForm('userForm')">保 存</el-button><el-button @click="resetForm('userForm')">重 置</el-button></el-form-item></el-form></div><el-dialogtitle="提示":visible.sync="centerDialogVisible"width="30%"@close="closeDialog":close-on-click-modal="false":close-on-press-escape="false"center><span><pre>{{ userForm }}</pre></span><span slot="footer" class="dialog-footer"><el-button @click="centerDialogVisible = false">取 消</el-button><el-button type="primary" @click="centerDialogVisible = false">确 定</el-button></span></el-dialog></div>
</template><script>
export default {name: "validate-01",data() {return {userForm: {name: '',nativePlace: '',gender: '',contactDetails: {qq: '',wx: '',phone: ''}},rules: {name: [{required: true, message: '请输入姓名', trigger: ['blur', 'change']},{min: 2, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur'}],nativePlace: [{required: true, message: '请选择籍贯', trigger: 'blur'}],gender: [{required: true, message: '请选择籍贯', trigger: 'change'}],'contactDetails.qq': [{required: true, message: '请输入联系方式qq', trigger: ['blur', 'change']},],'contactDetails.wx': [{required: true, message: '请输入联系方式微信', trigger: ['blur', 'change']},],'contactDetails.phone': [{required: true, message: '请输入联系方式手机号', trigger: ['blur', 'change']},],},centerDialogVisible: false,};},methods: {closeDialog() {this.centerDialogVisible = false;this.$refs.userForm.resetFields();},submitForm(formName) {this.$refs.userForm.validate((valid) => {if (valid) {this.centerDialogVisible = true;} else {console.log('error submit!!');return false;}});},resetForm(formName) {//this.$refs[formName].resetFields();this.$refs.userForm.resetFields();}}
}
</script><style scoped>
.container {display: flex;justify-content: center;align-items: center;height: 100vh; /* 设置父容器的高度为视口高度,使其充满整个屏幕 */
}.center-container {max-width: 600px; /* 设置内部容器的最大宽度,根据需求进行调整 */
}
</style>

字段联动校验

在这里插入图片描述

<template><div class="container"><div class="center-container"><el-form :model="userForm" :rules="rules" ref="userForm" label-width="100px"class="demo-userForm"><el-form-item label="审核结果" prop="result"><el-radio-group v-model="userForm.result" @change="clearValidate"><el-radio-button label="1">通过</el-radio-button><el-radio-button label="0">不通过</el-radio-button></el-radio-group></el-form-item><el-form-item label="审核意见" prop="desc":rules="[{required: userForm.result!=1, message: '请填写审核意见', trigger: 'blur'},{max: 200, message: '审核意见长度不能大于200', trigger: 'blur'}]"><el-input type="textarea" v-model="userForm.desc"></el-input></el-form-item><el-form-item><el-button type="primary" @click="submitForm('userForm')">保 存</el-button><el-button @click="resetForm('userForm')">重 置</el-button></el-form-item></el-form></div><el-dialogtitle="提示":visible.sync="centerDialogVisible"width="30%"@close="closeDialog":close-on-click-modal="false":close-on-press-escape="false"center><span><pre>{{ userForm }}</pre></span><span slot="footer" class="dialog-footer"><el-button @click="centerDialogVisible = false">取 消</el-button><el-button type="primary" @click="centerDialogVisible = false">确 定</el-button></span></el-dialog></div>
</template><script>
export default {name: "validate-01",data() {return {userForm: {result: '1',desc: ''},rules: {result: [{required: true, message: '请选择审核结果', trigger: 'change'}],},centerDialogVisible: false,};},methods: {closeDialog() {this.centerDialogVisible = false;this.$refs.userForm.resetFields();},clearValidate(val) {if (val == 1) {this.$refs.userForm.clearValidate('desc')}},submitForm(formName) {this.$refs.userForm.validate((valid) => {if (valid) {this.centerDialogVisible = true;} else {console.log('error submit!!');return false;}});},resetForm(formName) {//this.$refs[formName].resetFields();this.$refs.userForm.resetFields();}}
}
</script><style scoped>
.container {display: flex;justify-content: center;align-items: center;height: 100vh; /* 设置父容器的高度为视口高度,使其充满整个屏幕 */
}.center-container {max-width: 600px; /* 设置内部容器的最大宽度,根据需求进行调整 */
}
</style>

自定义校验函数

在这里插入图片描述

<template><div class="container"><div class="center-container"><el-form :model="userForm" :rules="rules" ref="userForm" label-width="100px"class="demo-userForm"><el-form-item label="提现金额" prop="amt"><el-input v-model="userForm.amt"></el-input></el-form-item><el-form-item label="证件类型" prop="idCardType"><el-select v-model="userForm.idCardType" placeholder="请选择证件类型"><el-option value="1" label="居民身份证"></el-option><el-option value="2" label="护照"></el-option></el-select></el-form-item><el-form-item label="证件号" prop="idCard"><el-input v-model="userForm.idCard"></el-input></el-form-item><el-form-item><el-button type="primary" @click="submitForm('userForm')">保 存</el-button><el-button @click="resetForm('userForm')">重 置</el-button></el-form-item></el-form></div><el-dialogtitle="提示":visible.sync="centerDialogVisible"width="30%"@close="closeDialog":close-on-click-modal="false":close-on-press-escape="false"center><span><pre>{{ userForm }}</pre></span><span slot="footer" class="dialog-footer"><el-button @click="centerDialogVisible = false">取 消</el-button><el-button type="primary" @click="centerDialogVisible = false">确 定</el-button></span></el-dialog></div>
</template><script>
import {cardid} from "@/utils/validate";export default {name: "validate-01",data() {let checkAmt = (rule, value, callback) => {if (value === '' || value === null) {callback(new Error('请输入提现金额'));} else if (value > 9999999.99) {//金额总长度不能大于10,包含小数点 value.toString().length > 10//数据库存储的类型为decimal(10,2),所以值不能大于9999999.99callback(new Error('提现金额不能大于9999999.99'));} else {callback();}}let checkIdCard = (rule, value, callback) => {if (!this.userForm.idCardType) {this.$refs.userForm.validateField('idCardType');} else {let idCardType = this.userForm.idCardType;if (idCardType == 1) {//居民身份证console.log(cardid(value))if (!cardid(value)[0]) {//todo 校验未成年callback();} else {callback(new Error(cardid(value)[1]))}} else if (idCardType == 2) {//护照let pattern = /^[a-zA-Z0-9]{3,20}$/;if (!pattern.test(value)) {callback(new Error("护照格式错误"))}} else {callback();}}}return {userForm: {idCard: '',idCardType: '',amt: '',},rules: {amt: [{required: true, message: '请输入提现金额', trigger: ['blur', 'change']},{pattern: /^\d+(\.\d{1,2})?$/, message: '金额格式错误', trigger: ['blur', 'change']},{validator: checkAmt, trigger: ['blur', 'change']}],idCardType: [{required: true, message: '请选择证件类型', trigger: ['blur']},],idCard: [{required: true, message: '请输入证件号', trigger: ['blur', 'change']},{validator: checkIdCard, trigger: ['blur', 'change']}],},centerDialogVisible: false,};},methods: {closeDialog() {this.centerDialogVisible = false;this.$refs.userForm.resetFields();},submitForm(formName) {this.$refs.userForm.validate((valid) => {if (valid) {this.centerDialogVisible = true;} else {console.log('error submit!!');return false;}});},resetForm(formName) {//this.$refs[formName].resetFields();this.$refs.userForm.resetFields();}}
}
</script><style scoped>
.container {display: flex;justify-content: center;align-items: center;height: 100vh; /* 设置父容器的高度为视口高度,使其充满整个屏幕 */
}.center-container {max-width: 600px; /* 设置内部容器的最大宽度,根据需求进行调整 */
}
</style>

动态列表表单

在这里插入图片描述

<template><div class="container"><div class="center-container"><el-form :model="{'contractData':contractData}" ref="contForm"><el-table :data="contractData" border style="width: 100%;" stripe><el-table-column label="序号" min-width="5%"><template slot-scope="scope"><p class="text-align:center;">{{ scope.$index + 1 }}</p></template></el-table-column><el-table-column prop="contName" label="合同名称" min-width="20%"><template slot-scope="scope"><el-form-item :prop="'contractData.'+scope.$index+'.contName'":rules="contRule.contName"><el-inputv-model.trim="scope.row.contName"placeholder="请输入合同名称" maxlength="200"></el-input></el-form-item></template></el-table-column><el-table-column label="合同编号" min-width="20%"><template slot-scope="scope"><el-form-item :prop="'contractData.'+scope.$index+'.contCode'":rules="contRule.contCode"><el-inputv-model.trim="scope.row.contCode" maxlength="200"placeholder="合同编号"></el-input></el-form-item></template></el-table-column></el-table><el-form-item><p><el-button @click="addCont()">添 加</el-button><el-button type="primary" @click="submitForm()">保 存</el-button><el-button @click="resetForm()">重 置</el-button></p></el-form-item></el-form></div><el-dialogtitle="提示":visible.sync="centerDialogVisible"width="30%"@close="closeDialog":close-on-click-modal="false":close-on-press-escape="false"center><span><pre>{{ contractData }}</pre></span><span slot="footer" class="dialog-footer"><el-button @click="centerDialogVisible = false">取 消</el-button><el-button type="primary" @click="centerDialogVisible = false">确 定</el-button></span></el-dialog></div>
</template><script>
export default {name: "validate-01",data() {return {contractData: [],contRule: {contCode: [{required: true,message: '合同编号不能为空',trigger: 'change'}],contAmt: [{required: true, message: '合同金额不能为空', trigger: 'change'},{pattern: /^(0\.0*[1-9]+[0-9]*$|[1-9]+[0-9]*\.[0-9]*[0-9]$|[1-9]+[0-9]*$)/,message: '非法数字'},{pattern: /^(([1-9]\d*)|\d)(\.\d{1,2})?$/,message: '最多两位小数'},],contName: [{required: true,message: '请输入合同名称',trigger: 'change'}],},centerDialogVisible: false,};},methods: {closeDialog() {this.centerDialogVisible = false;this.$refs.contForm.resetFields();},submitForm() {this.$refs.contForm.validate((valid) => {if (valid) {if (this.contractData.length === 0) {this.$message({showClose: true,message: '请先添加合同',type: 'warning',duration: 1500});} else {this.centerDialogVisible = true;}} else {console.log('error submit!!');return false;}});},resetForm() {//this.$refs[formName].resetFields();this.$refs.contForm.resetFields();},addCont() {this.contractData.push({contName: '',contCode: ''});}}
}
</script><style scoped></style>

文件校验

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<template><div class="container"><div class="center-container"><el-form :model="userForm" :rules="rules" ref="userForm" label-width="100px"class="demo-userForm"><el-form-item label='附件' prop='fileList'><el-upload class='m-upload'action='/mock/user/img/upload':headers='headers'accept='.jpg,.png,.jpeg':on-success='handleAvatarSuccess':file-list='userForm.fileList':limit='2':on-exceed='handleExceed':on-preview='handlePreview':on-remove='handleRemove':before-upload="beforeAvatarUpload":before-remove="beforeRemove"><el-button type='primary'>上传</el-button></el-upload></el-form-item><el-form-item><el-button type="primary" @click="submitForm('userForm')">保 存</el-button><el-button @click="resetForm('userForm')">重 置</el-button></el-form-item></el-form></div><el-dialogtitle="提示":visible.sync="centerDialogVisible"width="30%"@close="closeDialog":close-on-click-modal="false":close-on-press-escape="false"center><span><pre>{{ userForm }}</pre></span><span slot="footer" class="dialog-footer"><el-button @click="centerDialogVisible = false">取 消</el-button><el-button type="primary" @click="centerDialogVisible = false">确 定</el-button></span></el-dialog></div>
</template><script>
import VueCookies from 'vue-cookies';export default {name: "validate-01",data() {return {userForm: {fileList: []},rules: {fileList: [{type: 'array', required: true, message: '请上传附件', trigger: ['change', 'blur']},{type: 'array', min: 2, message: '请至少上传2个附件', trigger: 'change'},],},centerDialogVisible: false,};},computed: {headers() {return {'Authorization': 'Bearer ' + VueCookies.get('access_token') // 直接从本地获取token就行};},},methods: {closeDialog() {this.centerDialogVisible = false;this.$refs.userForm.resetFields();},submitForm() {this.$refs.userForm.validate((valid) => {if (valid) {this.centerDialogVisible = true;} else {console.log('error submit!!');return false;}});},resetForm() {this.$refs.userForm.resetFields();},handleAvatarSuccess(response, file, fileList) {//上传成功console.log("response:", JSON.stringify(response))let self = this;let fileInfo = {...response.data};fileInfo.name = fileInfo.fileName;self.userForm.fileList.push(fileInfo);this.$refs.userForm.validateField("fileList")this.$forceUpdate();},handleExceed(files, fileList) {this.$message.warning('当前限制选择 2 个文件,本次选择了' + files.length + '个文件,共选择了' + (files.length + fileList.length) + ' 个文件');},handlePreview(val) {console.log("val:", JSON.stringify(val))},handleRemove() {this.userForm.fileList = [];},beforeAvatarUpload() {},beforeRemove() {}}
}
</script><style scoped>
.container {display: flex;justify-content: center;align-items: center;height: 100vh; /* 设置父容器的高度为视口高度,使其充满整个屏幕 */
}.center-container {max-width: 600px; /* 设置内部容器的最大宽度,根据需求进行调整 */
}
</style>

多表单el-form提交校验

使用Promise语法

在这里插入图片描述
在这里插入图片描述

<template><div class="container"><div class="center-container"><el-form :model="userForm1" :rules="rules" ref="userForm1" label-width="100px"class="demo-userForm"><span>基本信息1:</span><el-form-item label="姓名" prop="name"><el-input v-model="userForm1.name"></el-input></el-form-item></el-form><el-form :model="userForm2" :rules="rules" ref="userForm2" label-width="100px"class="demo-userForm"><span>基本信息2:</span><el-form-item label="姓名" prop="name"><el-input v-model="userForm2.name"></el-input></el-form-item></el-form><el-button type="primary" @click="submitForm()">保 存</el-button><el-button @click="resetForm()">重 置</el-button></div><el-dialogtitle="提示":visible.sync="centerDialogVisible"width="30%"@close="closeDialog":close-on-click-modal="false":close-on-press-escape="false"center><span><pre>{{ userForm1 }}</pre></span><span><pre>{{ userForm2 }}</pre></span><span slot="footer" class="dialog-footer"><el-button @click="centerDialogVisible = false">取 消</el-button><el-button type="primary" @click="centerDialogVisible = false">确 定</el-button></span></el-dialog></div>
</template><script>
export default {name: "validate-01",data() {return {userForm1: {},userForm2: {},rules: {name: [{required: true, message: '请输入姓名', trigger: ['blur', 'change']},{min: 2, max: 5, message: '长度在 2 到 5 个字符', trigger: 'blur'}],},centerDialogVisible: false,};},methods: {closeDialog() {this.centerDialogVisible = false;this.$refs.userForm1.resetFields();this.$refs.userForm2.resetFields();},submitForm() {const p1 = new Promise((resolve, reject) => {this.$refs['userForm1'].validate(valid => {if (valid) resolve()})})const p2 = new Promise((resolve, reject) => {this.$refs['userForm2'].validate(valid => {if (valid) resolve()})})Promise.all([p1, p2]).then(() => {console.log('submit')this.centerDialogVisible = true;})},resetForm() {this.$refs.userForm1.resetFields();this.$refs.userForm2.resetFields();}}
}
</script><style scoped>
.container {display: flex;justify-content: center;align-items: center;height: 100vh; /* 设置父容器的高度为视口高度,使其充满整个屏幕 */
}.center-container {max-width: 600px; /* 设置内部容器的最大宽度,根据需求进行调整 */
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/68509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 中数据结构HashSet的用法

Java HashSet HashSet 基于 HashMap 来实现的&#xff0c;是一个不允许有重复元素的集合。 HashSet 允许有 null 值。 HashSet 是无序的&#xff0c;即不会记录插入的顺序。 HashSet 不是线程安全的&#xff0c; 如果多个线程尝试同时修改 HashSet&#xff0c;则最终结果是…

深度学习环境搭建笔记(二):mmdetection-CPU安装和训练

文章目录 第一步&#xff1a;安装anaconda第二步&#xff1a;安装虚拟环境第三步&#xff1a;安装torch和torchvision第四步: 安装mmcv-full第五步: 安装mmdetection第六步&#xff1a;测试环境第七步&#xff1a;训练-目标检测7.1 准备数据集7.2 检查数据集7.3 训练网络 第一步…

计算机毕业设计 社区买菜系统 Vue+SpringBoot+MySQL

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师&#xff0c;全栈领域优质创作者。 项目内容…

electron win系统通知修改通知标题栏

标题栏的 electron.app.Electron 如何修改&#xff1a; var package require("../package.json"); app.setAppUserModelId(package.description); app.setAppUserModelId 在主进程的app这里修改

R语言Meta分析核心技术

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

SpringBoot2.0(Spring读取配置文件常用方法,打war包在Tomcat中启动)

目录 一&#xff0c;SpringBoot中读取配置文件的常用方法1.1&#xff0c;使用Value读取1.2&#xff0c;使用ConfigurationProperties1.3&#xff0c;使用Environment1.4&#xff0c;自定义配置文件读取 二&#xff0c;SpringBoot部署war项目到tomcat9和启动原理 一&#xff0c;…

详解4种类型的爬虫技术

聚焦网络爬虫是“面向特定主题需求”的一种爬虫程序&#xff0c;而通用网络爬虫则是捜索引擎抓取系统&#xff08;Baidu、Google、Yahoo等&#xff09;的重要组成部分&#xff0c;主要目的是将互联网上的网页下载到本地&#xff0c;形成一个互联网内容的镜像备份。 增量抓取意…

【vue】vuex持久化插件vuex-persistedstate:

文章目录 一、说明&#xff1a;二、手动利用HTML5的本地存储&#xff1a;三、利用vuex-persistedstate插件【1】安装【2】配置使用【3】存储sessionStorage的情况【4】存储cookie的情况【5】默认持久化所有state&#xff0c;指定需要持久化的state,配置如下【6】vuex引用多个插…

公园气象站——观测实时气象,保障游客安全

公园气象站是一种用于监测和记录气象数据的系统。在公园内设置公园气象站可以帮助我们了解公园内的气候状况&#xff0c;包括空气湿度、空气温度、风速和风向等参数。这些数据是公园管理、游客安全和环境保护等方面重要的辅助依据。 负氧离子监测&#xff1a;负氧离子是指空气…

数学建模--非多项式拟合法的Python实现

目录 1.算法异同区别 2.算法核心步骤 3.算法核心代码 4.算法效果展示 1.算法异同区别 #*************************************************************************************************************# 方法区别探究 1.对于多项式拟合你需要大致知道这些点的分布&#xf…

Dubbo 接口测试原理及多种方法实践总结

1、什么是 Dubbo&#xff1f; Dubbo 最开始是应用于淘宝网&#xff0c;由阿里巴巴开源的一款优秀的高性能服务框架&#xff0c;由 Java 开发&#xff0c;后来贡献给了 Apache 开源基金会组织。 下面以官网的一个说明来了解一下架构的演变过程&#xff0c;从而了解 Dubbo 的诞…

开了抖店后就可以直播带货了吗?想在抖音带货的,建议认真看完!

我是王路飞。 关于抖店和直播带货的关系&#xff0c;其实很多人经常搞不清楚。 不然的话&#xff0c;也不会有这个问题的出现了&#xff1a;开了抖店后就可以直播带货了吗&#xff1f; 在我看来&#xff0c;这个问题很简单&#xff0c;但在不了解抖音电商和直播带货其中门道…

The WebSocket session [x] has been closed and no method (apart from close())

在向客户端发送消息时&#xff0c;session关闭了。 不管是单客户端发送消息还是多客户端发送消息&#xff0c;在发送消息之前判断session 是否关闭 使用 isOpen() 方法

Elasticsearch 8.X 可以按照数组下标取数据吗?

1、线上环境问题 老师、同学们&#xff0c;有人遇到过这个问题么&#xff0c;索引中有一个 integer 数组字段&#xff0c;然后通过脚本获取数组下标为1的值作为运行时字段&#xff0c;发现返回的值是乱的&#xff0c;并不是下标为1的值&#xff0c; 具体如下: DELETE my_index …

sql:SQL优化知识点记录(六)

&#xff08;1&#xff09;索引优化1 查看一下有没有建立索引&#xff1a; 用到索引中的一个&#xff1a;type中的ref决定访问性能 用到索引中的两个&#xff1a;通过key_len的长度可以看出来&#xff0c;比第一个大一点。或者通过ref&#xff1a;中用到了两个常量const 用到了…

【Android Framework系列】第14章 Fragment核心原理(AndroidX版本)

1 简介 Fragment是一个历史悠久的组件&#xff0c;从API 11引入至今&#xff0c;已经成为Android开发中最常用的组件之一。 Fragment表示应用界面中可重复使用的一部分。Fragment定义和管理自己的布局&#xff0c;具有自己的生命周期&#xff0c;并且可以处理自己的输入事件。…

如何合并为pdf文件?合并为pdf文件的方法

在数字化时代&#xff0c;人们越来越依赖电子文档进行信息交流和存储。合并为PDF成为一种常见需求&#xff0c;它能将多个文档合而为一&#xff0c;方便共享和管理。无论是合并多个单页文档&#xff0c;还是将多页文档合并&#xff0c;操作都变得简单高效。那么。如何合并为pdf…

移除链表元素_每日一题

“路虽远&#xff0c;行则将至” ❤️主页&#xff1a;小赛毛 ☕今日份刷题&#xff1a;移除链表元素 题目描述&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例1&…

真香:Alibaba开源GitHub星标100K微服务架构全彩进阶手册

前言&#xff1a; 微服务架构作为一种高效灵活的应用架构&#xff0c;正在成为企业级应用开发的主流选择。在众多的微服务架构指南中&#xff0c;阿里巴巴开源的GitHub微服务架构全彩进阶手册备受瞩目&#xff0c;其100star更是证明了其在开发者社区中的重要地位。 这本手册汇…

【Yolov5+Deepsort】训练自己的数据集(3)| 目标检测追踪 | 轨迹绘制 | 报错分析解决

&#x1f4e2;前言&#xff1a;本篇是关于如何使用YoloV5Deepsort训练自己的数据集&#xff0c;从而实现目标检测与目标追踪&#xff0c;并绘制出物体的运动轨迹。本章讲解的为第三部分内容&#xff1a;数据集的制作、Deepsort模型的训练以及动物运动轨迹的绘制。本文中用到的数…