<提示语部分不要在意(非重点部分)>
简单说下布局(采用的是 vue的element ui的ui框架 )进行布局操作的
子组件模板部分如下(code部分是很基础的)
<template> <div class="forget"> <el-dialog title="修改新密码" :visible.sync="dialog.visible" :close-on-click-modal="false" :close-on-press-escape="false" > <el-form :model="dialog.ruleForm" status-icon :rules="rules" :ref="dialog.ruleForms" label-width="100px" class="demo-ruleForm"> <el-form-item label="手机号码" prop="phone" required> <el-input type="text" v-model.number="dialog.ruleForm.phone" autocomplete="off" :clearable="true" ></el-input> </el-form-item> <el-form-item label="手机验证码"prop="code" required> <div class="send-code"> <el-input type="text" v-model="dialog.ruleForm.code" autocomplete="off" maxlength="6" show-word-limit :clearable="true" ></el-input> <el-link :style="{color:dialog.ruleForm.phone.toString().length===11" type="info" :underline="false" :disabled="getDisabled" @click="sendCode({ phone:dialog.ruleForm.phone,sendCode:dialog.ruleForm.sendCode })" >{{dialog.ruleForm.sendCode}}</el-link> </div> </el-form-item> <el-form-item label="新密码" prop="newPwd" required> <el-input :clearable="true" type="password" v-model="dialog.ruleForm.newPwd"></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="cancel">取 消</el-button> <el-button type="primary" @click="determine(dialog.ruleForms)" :loading="dialog.ruleForm.loading" >{{dialog.ruleForm.loadingText}}</el-button> </div> </el-dialog> </div> </template>
子组件逻辑部分如下(code部分是很基础的)
在@/utils/validate.js中的使用正则代码
// 验证手机号码 export const validatPhone = /^(^(([0\+]\d{2,3}-)"htmlcode"><script> import {validatPhone,validatePassword} from '@/utils/validate' export default { props:{ dialog:{ type:Object, default: {} }, }, name: "Forget", data(){ // 使用正则进行验证手机号码 const validatePhone = (rule, value, callback) => { if (!value) { return callback(new Error('请输入手机号码')); } else { if (!validatPhone.test(value)) { callback(new Error('请输入手机号码')); return } callback(); } }; // 使用进行验证手机验证码 const validateCode = (rule, value, callback) => { if (value === '') { return callback(new Error('请输入验证码')); } else { //真正环境请修改成自己的逻辑即可 if (this.dialog.ruleForm.code !== '123456') { callback(new Error('验证码失误,请重新输入')) // this.dialog.ruleForm.code = '' return } callback(); } }; // 使用正则进行验证密码 const validatenewPwd = (rule, value, callback) => { if (value === '') { callback(new Error('请输入密码')); return } else if (!validatePassword.test(value)) { return callback(new Error('新密码不合法')); } else { callback(); } }; return { rules:{ //验证表单元素中的规则 phone:[ { validator: validatePhone, trigger: ['blur','change'] } ], code:[ { validator: validateCode, trigger: ['blur','change'] } ], newPwd:[ { validator: validatenewPwd, trigger: ['blur','change'] } ], }, timer: null//操作定时器 } }, computed:{ //getDisabled() 当手机号码的长度等于11位和点击验证码状态为false时,则可以进行倒计时操作 getDisabled(){ let phone= this.dialog.ruleForm.phone const isChick = this.dialog.ruleForm.isChick if(phone.toString().length === 11 && isChick ===false){ return false } else { // this.dialog.ruleForm.disabled = true return true } } }, methods:{ // 发送验证码 sendCode(opt){ this.$emit('sendCode',opt) }, // 点击取消按钮时触发 cancel(){ this.$emit('cancel') }, // 点击确定按钮时触发 determine(resf){ this.$refs[resf].validate((valid) => { if (valid) { this.$emit('determine',resf) } else { console.log('error submit!!'); return false; } }); }, } } </script>子组件逻辑部分如下(code部分是很基础的)
<style scoped lang="scss"> .forget{ /deep/ .el-dialog__wrapper{ .el-dialog{ max-width: 500px; .el-dialog__header{ text-align: center; } } .demo-ruleForm{ .el-form-item__content{ max-width:100% } } .el-dialog__body{ .el-form-item{ text-align: center; } } } .send-code{ display: flex;flex: 1;justify-content: space-evenly; /deep/ .el-input{ margin-right: 12px } /deep/ .el-link{ white-space: nowrap; display: inline-block; line-height: 1; cursor: pointer; background: #fff; border: 1px solid #dcdfe6; color: #606266; -webkit-appearance: none; text-align: center; box-sizing: border-box; outline: none; margin: 0; transition: .1s; font-weight: 500; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; padding: 12px 10px; font-size: 14px; border-radius: 4px; } } .dialog-footer{ display: flex; flex: 1; justify-content: center; /deep/ .el-button{ flex: 0 0 40%; } } } </style>父组件中的模板部分
<template> <forget :dialog="dialog"@cancel="dialog.visible= false" @determine="determine" @sendCode="sendCode"></forget> </template>为什么需要使用set这个api方法呢
如下截图
可以学习下这个链接的使用set的例子
全局变量globals.js文件
[vue-set]的文档( cn.vuejs.org/v2/api/#Vue… )
说明(*****向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。)
export default { //判断是否点击了 isChick(data,key='disabled',count=0){ data[key] =true if(count<=0){ data[key] =false } }, //此处是重点 使用的vue官网给的api方法 [vue-set](https://cn.vuejs.org/v2/api/#Vue-set) sendCode(self,name,k,v){ self.$set(name,k,v) } }父组件中的逻辑部分
<script> export default { data() { return { // 显示子组件修改密码的对象变量 dialog: { visible: false, //是否显示 ruleForms: 'ruleForms', //点击按钮后,需要操作的refs(也就是dom元素) ruleForm: { //所需要进行在表单中操作的部分 phone: '', newPwd: '', code: '', sendCode: '发送验证码', disabled: false, isChick:false, loading: false, loadingText: '确 定' }, }, //倒计时60秒 timeCount:60 } }, methods:{ //重点部分 sendCode60s(self,opt){ let count=self.timeCount; const ruleForm = self[opt.dialog][opt.ruleForm] self.timer = setInterval(()=>{ //这个按钮是 self.$globals.isChick(ruleForm,'disabled',count) let code = count<10"color: #ff0000">总结以上所述是小编给大家介绍的vue2之简易的pc端短信验证码的问题及处理方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年12月28日
2024年12月28日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]