vue2.0可以使用this,如果配合element的form表单的话,会比较方便,至于写这次的笔记是因为,3.0使用setup()以后不存在this,里面的model以及rules校验,最后的提交都跟之前有所不同,故有此文章。

vue2.0配合element的代码如下

<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  <el-form-item label="用户名" prop="username">
    <el-input v-model="ruleForm.username"></el-input>
  </el-form-item>
  <el-form-item label="密码" prop="password">
    <el-input v-model="ruleForm.password"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
    <el-button @click="resetForm('ruleForm')">重置</el-button>
  </el-form-item>
</el-form>
<script>
  export default {
    data() {
      return {
        ruleForm: {
          password: '',
          username: ''
        },
        rules: {
          username: [
            { required: true, message: '请输入用户', trigger: 'blur' }
          ],
          password: [
            { required: true, message: '请输入密码', trigger: 'blur' }
          ],
        }
      };
    },
    methods: {
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },
      resetForm(formName) {
        this.$refs[formName].resetFields();
      }
    }
  }
</script>

vue3.0+element-plus的form表单如下

<template>
<div class="box">
  <el-form :model="ruleForm" :rules="rules" ref="ruleFormsss" label-width="100px">
    <el-form-item label="用户" prop="username">
      <el-input v-model="ruleForm.username"></el-input>
    </el-form-item>
    <el-form-item label="密码" prop="password">
      <el-input v-model="ruleForm.password"></el-input>
    </el-form-item>
    <el-form-item label="活动区域" prop="region">
    <el-select v-model="ruleForm.region" placeholder="请选择活动区域">
      <el-option label="区域一" value="shanghai"></el-option>
      <el-option label="区域二" value="beijing"></el-option>
    </el-select>
  </el-form-item>
    <el-form-item>
      <el-button type="primary" size="medium" @click="submitForm">登 录</el-button>
    </el-form-item>
  </el-form>
</div>
</template>

<script>
import {
  reactive,
  ref,
  unref
} from 'vue'
export default {
  setup(props) {
    const ruleFormsss = ref(null);
    // 定义变量
    const ruleForm = reactive({
      username: '',
      password: '',
      region: ''
    })

    const rules = {
      username: [
        { required: true, message: '请输入用户名', trigger: 'blur' },
      ],
      password: [
        { required: true, message: '请输入密码', trigger: 'blur' },
      ],
      region: [
        { required: true, message: '请选择活动区域', trigger: 'change' }
      ]
    }

    const submitForm = async () => {
      const form = unref(ruleFormsss);
      if (!form) return
      try {
        await form.validate()
        const { username, password, region } = ruleForm
        console.log(username, password, region)
      } catch (error) {
      } 
    }
    return {
      ruleForm,
      rules,
      submitForm,
      ruleFormsss
    }
  }
}
</script>

<style lang="less">
</style>

如需转载,请添加地址,谢谢各位,顺便贴上vue3.0+element-plus+axios的github地址,它里面涉及了form表单、侧边导航栏、axios接口请求等,https://github.com/mschange/vue3-ts-element-plus-axios

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐