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