“这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战”vue
<template>
<a-button type="primary" @click="showHnader">
显示
</a-button>
<a-form
ref="formRef"
:model="formState.youForm"
:rules="rules"
:labelCol="{ style: 'width: 100px' }"
v-if="flag"
>
<a-form-item ref="youNaNe" label="姓名" name="youNaNe">
<a-input
placeholder="请选择"
v-model:value="formState.youForm.youNaNe"
style="width:270px
" />
</a-form-item>
<a-form-item label="学校" name="useSlectValue">
<a-select placeholder="请选择" style="width:270px"
v-model:value="formState.youForm.useSlectValue">
<a-select-option :value="item.code"
v-for="(item,index) in formState.backDataSchool"
:key="index">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="日期" required name="date1">
<a-date-picker
style="width:270px"
v-model:value="formState.youForm.date1"
show-time
format="YYYY-MM-DD"
type="date"
valueFormat="YYYY-MM-DD"
placeholder="请选择"
/>
</a-form-item>
<a-form-item label="爱好" name="type" >
<a-checkbox-group v-model:value="formState.youForm.type">
<a-checkbox :value="item.code" :name="item.name"
v-for="(item,index) in formState.likeBackArr"
:key="index"
>{{ item.name }}</a-checkbox>
</a-checkbox-group>
</a-form-item>
<a-form-item :wrapper-col="{ span: 14, offset: 1 }">
<a-button type="primary" @click="onSubmit">
提交
</a-button>
<a-button style="margin-left: 10px" @click="resetForm">
清空验证规则及数据
</a-button>
<a-button style="margin-left: 10px" @click="removeResult">
移除表单项的校验结果
</a-button>
</a-form-item>
</a-form>
</template>
复制代码
<script lang="ts">
import { defineComponent, reactive, ref, toRaw, nextTick } from 'vue';
export default defineComponent({
setup() {
const formRef = ref();
const flag=ref(false)
const formState= reactive({
youForm:{
youNaNe:'',
useSlectValue: undefined,
date1: undefined,
delivery: false,
type: [],
},
backDataSchool:[
{
name:'第一小学',code:'001'
},
{
name:'第二小学',code:'002'
},
],
likeBackArr:[
{name:'睡觉',code:'1'},
{name:'吃饭',code:'2'},
{name:'吃饭',code:'3'},
]
});
const rules = {
youNaNe: [
{
required: true,
message: '请输入姓名',
trigger: 'blur'
},
],
useSlectValue: [
{
required: true,
message: '请选择学校',
trigger: 'change'
}
],
date1: [
{ required: true,
message: '请选择日期',
trigger: 'change',
}
],
type: [
{
type: 'array',
required: true,
message: '请选择',
trigger: 'change',
},
],
};
const onSubmit = () => {
formRef.value
.validate()
.then(() => {
console.log('values', formState, toRaw(formState));
})
.catch((err:any) => {
console.log('err')
});
};
const resetForm = () => {
// 移除规则和重置data中的数据
formRef.value.resetFields();
};
const removeResult=()=>{
// 移除表单项的校验结果。
formRef.value.clearValidate();
}
const showHnader=()=>{
flag.value=true;
nextTick(()=>{
formRef.value.clearValidate();
})
}
return {
formRef,
formState,
rules,
flag,
removeResult,
onSubmit,
resetForm,
showHnader
};
},
});
</script>
复制代码
<!-- 第一个坑
:model="formState.youForm" 必定要写成这样
不要写成:model="formState"
-->
第二个坑
// date1: [{ required: true,
message: '请选择日期',
trigger: 'change',
type: 'object'
}
],
// 若是 type: 'object',须要注意的是你须要定义一个接口
第三个须要注意的点
format="YYYY-MM-DD" type="date"
valueFormat="YYYY-MM-DD"
这样设置后能够在视图上显示和获得对应的格式
设置label的宽度很是好用
:labelCol="{ style: 'width: 100px' }"
复制代码
在使用vue的项目开发的过程当中
常常会定义大量的组件使用
这个时候组件中的定义的数据类型就很是重要了
此时咱们须要定义组件中须要的数据类型
以前我只知道简单的几个
今天突然发现原来还能够这样使用简直太棒了
特别是自定义验证这一块可能不常常用
可是能够处理不少特殊的场景
复制代码
props: {
// 基础的类型检查 (`null` 和 `undefined` 会经过任何类型验证)
propA: Number,
// 多个可能的类型
propB: [String, Number],
<!-- 我以前一直觉得多个验证是这样写 -->
propB:String | Number
// 必填的字符串
propC: {
type: String,
required: true
},
// 带有默认值的数字
propD: {
type: Number,
default: 100
},
// 带有默认值的对象
propE: {
type: Object,
// 对象或数组默认值必须从一个工厂函数获取
default: function() {
return { message: 'hello' }
}
},
// 自定义验证函数
propF: {
validator: function(value) {
// 这个值必须匹配下列字符串中的一个
return ['success', 'warning', 'danger'].indexOf(value) !== -1
}
},
// 具备默认值的函数
propG: {
type: Function,
// 与对象或数组默认值不一样,这不是一个工厂函数 —— 这是一个用做默认值的函数
default: function() {
return 'Default function'
}
}
复制代码