vue3 tsx element plus 中表单校验

// 以下都是单个input校验更加灵活
// LoginForm.tsx 
import { defineComponent, ref } from 'vue'
import { validateUsername, validatePassword } from './validate'

export default defineComponent({
  name: 'LoginForm',

  setup() {
    const username = ref('')
    const password = ref('')
    const errors = ref({ username: '', password: '' })

    const validateInput = (field: 'username' | 'password') => {
      let validationResult
      if (field === 'username') {
        validationResult = validateUsername(username.value)
      } else {
        validationResult = validatePassword(password.value)
      }
      if (validationResult === true) {
        errors.value[field] = ''
      } else {
        errors.value[field] = validationResult
      }
    }

    return () => (
      <div>
        <form onSubmit={(event) => {
          event.preventDefault()
          validateInput('username')
          validateInput('password')
          if (!errors.value.username && !errors.value.password) {
            alert('登录成功!')
          }
        }}>
          <label>
            用户名:
            <input
              type="text"
              placeholder="输入用户名"
              value={username.value}
              onInput={(event) => {
                username.value = event.target.value
                validateInput('username')
              }}
            />
            {errors.value.username && <p style="color: red">{errors.value.username}</p>}
          </label>
          <label>
            密码:
            <input
              type="password"
              placeholder="输入密码"
              value={password.value}
              onInput={(event) => {
                password.value = event.target.value
                validateInput('password')
              }}
            />
            {errors.value.password && <p style="color: red">{errors.value.password}</p>}
          </label>
          <button type="submit">登录</button>
        </form>
      </div>
    )
  },
})

// validate.ts
export function validateUsername(username?: string): string | true {
  if (!username) {
    return '用户名不能为空!'
  }
  return true
}

export function validatePassword(password?: string): string | true {
  if (!password) {
    return '密码不能为空!'
  }
  return true
}

下边是统一校验
 

// LoginForm.tsx
import { defineComponent, ref } from 'vue'
import { validateLogin } from './validate'

export default defineComponent({
  name: 'LoginForm',

  setup() {
    const username = ref('')
    const password = ref('')
    const errors = ref({ username: '', password: '' })

    const submitForm = () => {
      const validationResult = validateLogin(username.value, password.value)
      if (validationResult === true) {
        alert('登录成功!')
        errors.value = { username: '', password: '' }  // Clear errors on success
      } else {
        errors.value[validationResult.field] = validationResult.error
      }
    }

    return () => (
      <div>
        <form onSubmit={(event) => {
          event.preventDefault()
          submitForm()
        }}>
          <label>
            用户名:
            <input
              type="text"
              placeholder="输入用户名"
              value={username.value}
              onInput={(event) => (username.value = event.target.value)}
            />
            {errors.value.username && <p style="color: red">{errors.value.username}</p>}
          </label>
          <label>
            密码:
            <input
              type="password"
              placeholder="输入密码"
              value={password.value}
              onInput={(event) => (password.value = event.target.value)}
            />
            {errors.value.password && <p style="color: red">{errors.value.password}</p>}
          </label>
          <button type="submit">登录</button>
        </form>
      </div>
    )
  },
})
// validate.ts
export function validateLogin(username: string, password: string): { field: string; error: string; } | true {
  if (!username) {
    return { field: 'username', error: '用户名不能为空!' }
  }
  if (!password) {
    return { field: 'password', error: '密码不能为空!' }
  }
  return true
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
表单验证是前端开发一项非常重要的工作。Vue3和Element-Plus提供了更加便捷和灵活的表单验证方式。下面是一个示例,使用Vue3和Element-Plus实现表单验证: 1. 安装Element-Plus ```shell npm i element-plus -S ``` 2. 在Vue3项目引入Element-Plus并注册表单组件 ```javascript import { createApp } from 'vue'; import ElementPlus from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; import App from './App.vue'; const app = createApp(App); app.use(ElementPlus); app.mount('#app'); ``` 3. 在Vue3组件使用Element-Plus表单组件,并设置校验规则 ```html <template> <el-form :model="form" :rules="rules" ref="form" label-width="80px"> <el-form-item label="用户名" prop="username"> <el-input v-model="form.username"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input v-model="form.password" show-password></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm('form')">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { username: '', password: '' }, rules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, { min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur' } ] } }; }, methods: { submitForm(formName) { this.$refs[formName].validate(valid => { if (valid) { alert('提交成功'); } else { console.log('error submit!!'); return false; } }); } } }; </script> ``` 以上代码实现了一个带有两个输入框的表单,每个输入框都有校验规则,包括必填、长度限制等,点击提交按钮后,会触发表单验证,如果校验通过,则弹出提交成功的提示,否则不会提交表单

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值