Vue.js实现可配置的登录表单代码详解

这篇文章主要介绍了vue.js实现可配置的登录表单实例代码详解,文中给大家补充介绍了vue.js 全选与取消全选的实例代码,需要的朋友可以参考下

表单是后台项目业务中的常用组件,这次重构了登录功能以满足登录方式可配置的需求,在此记录和分享一下。

业务场景

在之前,项目只支持手机号+密码登录,前端是直接把表单写死的,后来有客户希望能支持验证码登录,有的客户还希望能有手机号+验证码+密码的登录方式…所以登录方式的灵活性需要可配置的表单支持,于是我把登录组件做了拆分。

Vue.js实现可配置的登录表单代码详解 

以表单元素为粒度,分离出了手机号、密码、短信验证码这几个组件,它们内部都有自己的表单验证方法,通过组合可以快速完成登录、注册、找回密码等表单组件。高内聚低耦合、高内聚低耦合…跟着念十遍~

立即学习“前端免费学习笔记(深入)”;

.├ common├ captcha.vue|  ├ password.vue|  └ phone.vue├ login|  └ index.vue├ register|  └ index.vue└ resetPassword  └ index.vue

登录后复制

这里我们将login作为父组件,读取服务端返回的登录配置并在模板做条件渲染,登录时调用子组件内部的表单验证,最后通过Vuex拿到数据调用接口。整个可配置登录表单的逻辑就是酱子,接下来上代码。

代码

请求服务端配置数据:

/* 参数说明: * 'password': 密码登录  * 'captcha': 短信验证码登录 * 'password_or_captcha': 密码或短信登录  * 'password_with_captcha': 密码+短信登录 */config: { login_methods: 'password'}

登录后复制

登录组件的核心渲染代码(pug):

.login-card .login-header   h3 登录 .login-content  phone(ref="phone")  password(   v-if="isPasswordMode"   ref="password"  )  captcha(   v-if="isCaptchaMode"   ref="captcha"  )    template(v-if="isPasswordWithCaptchaMode")   captcha(ref="captcha")   password(ref="password")    template(v-if="isPasswordOrCaptchaMode")   ...  el-button(@click="login") 登录

登录后复制

登录时需要三个步骤:表单验证、组装数据、调用接口:

async login () { if (!this.validate()) return const loginData = this.getLoginData() await this.postLogin(loginData) ...}

登录后复制

登录的表单验证其实是对当前登录方式中所有组件的 validate() 方法进行逻辑判断:

validate () { const phone = this.$refs.phone.validate() let isPass = false   if (this.isPasswordMode) {  if (this.$refs.password) isPass = this.$refs.password.validate() }   if (this.isCaptchaMode) {  if (this.$refs.captcha) isPass = this.$refs.captcha.validate() }   if (this.isPasswordWithCaptchaMode) ...   if (this.isPasswordOrCaptchaMode) ...   isPass = phone && isPass return isPass}

登录后复制

每个子组件都是一个完整的表单,验证也由自己完成,password组件模板:

.login-password el-form(  :model="form"  :rules="rules"  ref="form"  @submit.native.prevent="" )  el-form-item(prop="password")   el-input(    v-model="form.password"    type="password"    name="password"   )

登录后复制

W3C: When there is only one single-line text input field in a form, the user agent should accept Enter in that field as a request to submit the form.

需要注意,根据 W3C标准 , 当一个form元素中只有一个输入框时,在该输入框中按下回车会自动提交表单。通过在 添加 @submit.native.prevent 可以阻止这一默认行为。

password组件的表单验证:

validate () { let res = false this.$refs.form.validate((valid) => {  res = valid }) return res}

登录后复制

最后从Vuex里拿到所有表单数据,进行组装:

computed: { ...mapState('login', {  phone: state => state.phone,  password: state => state.password,  captcha: state => state.captcha }), },methods: { ...  getLoginData () {  let mode = ''  const phone = this.phone  ...  const data = { phone }    if (this.isPasswordMode) {   mode = 'password'   data.password = password  }  if (this.isCaptchaMode) {   mode = 'captcha'   data.captcha = captcha  }   if (this.isPasswordWithCaptchaMode) ...    if (this.isPasswordOrCaptchaMode) ...    data.mode = mode  return data }}

登录后复制

补充:

vue.js 全选与取消全选的实例代码

new Vue({  el: '#app',  data: {    checked: false,    checkedNames: [],    checkedArr: ["Runoob", "Taobao", "Google"]  },  methods: {    changeAllChecked: function() {      if (this.checked) {        this.checkedNames = this.checkedArr      } else {        this.checkedNames = []      }    }  },  watch: {    "checkedNames": function() {      if (this.checkedNames.length == this.checkedArr.length) {        this.checked = true      } else {        this.checked = false      }    }  }})

登录后复制

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

JS 实现缓存算法的示例

react-native封装插件swiper的使用方法

在vue项目中使用sass的配置方法

以上就是Vue.js实现可配置的登录表单代码详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2755259.html

(0)
上一篇 2025年3月8日 07:14:28
下一篇 2025年3月3日 21:18:18

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 怎样操作vue.js使用3DES加密

    这次给大家带来怎样操作vue.js使用3DES加密,操作vue.js使用3DES加密的注意事项有哪些,下面就是实战案例,一起来看一下。 如何在VUE-CLI手脚架建立的工程中使用3des加密: npm install crypto-js -…

    编程技术 2025年3月8日
    200
  • 怎样使用JS实现3des+base64加密解密算法

    这次给大家带来怎样使用JS实现3des+base64加密解密算法,使用JS实现3des+base64加密解密算法的注意事项有哪些,下面就是实战案例,一起来看一下。 1. index.html: BASE64编码 var str = “网址:…

    2025年3月8日
    200
  • 怎样使用JS实现调用本地摄像头

    这次给大家带来怎样使用JS实现调用本地摄像头,使用JS实现调用本地摄像头的注意事项有哪些,下面就是实战案例,一起来看一下。 今天学习了一下js调用本地摄像头,其实是实现不是很麻烦,下面是代码部分,连接上Tomcat服务器,然后再到网页上打开…

    编程技术 2025年3月8日
    200
  • JavaScript中的E-mail 地址格式验证

    本文给大家分享javascript中的e-mail 地址格式验证,项目要求输入的数据必须包含@符号和点号。代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下吧 最近做了一个前端的项目,要求:输入的数据必须包含 @ 符号和点号(.)。…

    2025年3月8日
    200
  • Node.js Buffer使用详解

    这次给大家带来Node.js Buffer使用详解,Node.js Buffer使用的注意事项有哪些,下面就是实战案例,一起来看一下。 Buffer是什么? Buffer作为存在于全局对象上,无需引入模块即可使用,你绝对不可以忽略它。 可以…

    编程技术 2025年3月8日
    200
  • vue引用js文件方法详解

    这次给大家带来vue引用js文件方法详解,vue引用js文件的注意事项有哪些,下面就是实战案例,一起来看一下。 1、vue-cli webpack全局引入jquery (1) 首先 npm install jquery –sav…

    2025年3月8日
    200
  • 如何使用nodejs 服务器读取HTML文件渲染至前端

    这次给大家带来如何使用nodejs 服务器读取HTML文件渲染至前端,使用nodejs 服务器读取HTML文件渲染至前端的注意事项有哪些,下面就是实战案例,一起来看一下。 1.分别简单实现三个备用页面。 代码片段: .center { ma…

    2025年3月8日
    100
  • js中el表达式的使用和非空判断方法

    下面我就为大家分享一篇js中el表达式的使用和非空判断方法,具有很好的参考价值,希望对大家有所帮助。 注意,这里想说的不是jsp里面嵌套的el表达式的使用,而是在js中使用。 场景: 页面跳转后,使用spring mvc向前端页面传过来一个…

    编程技术 2025年3月8日
    200
  • 怎样进行Node.js模块全局安装路径配置

    这次给大家带来怎样进行Node.js模块全局安装路径配置,进行Node.js模块全局安装路径配置的注意事项有哪些,下面就是实战案例,一起来看一下。 下载安装NodeJS后,在自己选择的路径下会有如下的文件: 默认情况下NodeJS安装会同时…

    编程技术 2025年3月8日
    200
  • JS实现左边列表移到到右边列表功能

    这篇文章主要介绍了js实现左边列表移到到右边列表功能,实现功能主要是左边的下拉框内容添加到右边的下拉框,支持多选移动,且同时将右边的下拉框对象移除,需要的朋友可以参考下 实现功能: 1.左边的下拉框内容添加到右边的下拉框,支持多选移动,且同…

    2025年3月8日
    200

发表回复

登录后才能评论