项目中有很多自己封装的组件,如富文本组件,文件上传,图片上传等。而这些组件在表单中常常会在新增和编辑的场景应用。而且Element Plus官网展示demo都是基于Element Plus表单组件的,并没有演示非Element Plus表单组件,下面代码将演示如何实现非Element Plus的Vue组件触发ElForm的表单校验

自定义组件代码: ax-input-test.vue
<template>
    <input v-model="value" placeholder="请输入">
</template>
<script lang="ts">
import { computed } from 'vue'
import { useFormItem } from 'element-plus'
export default {
  name: "ax-input-test",
  props: {
    modelValue: {
      type: String,
      default: ''
    }
  },
  emits: ['update:modelValue'],
  setup(props: any, { emit}) {
    const { formItem } = useFormItem()
    const value = computed({
        get() {
            return props.modelValue
        },
        set(val) {
            emit('update:modelValue', val)
            formItem?.validate('blur')
        }
    })
    return {
        value
    }
  }
}
</script>

使用组件的代码edit-user-confirm.vue

<template>
            <div class="body">
                <el-form
                    ref="formRef"
                    :model="userForm"
                    label-width="120px"
                    :rules="formRules"
                >
                    <el-form-item label="昵称:" prop="nickName">
                        <ax-input-test
                            class="content-input"
                            v-model="userForm.nickName"
                            placeholder="请输入您的昵称"
                        ></ax-input-test>
                    </el-form-item>
                    <div class="bottom-box">
                        <div class="btn-box">
                            <el-button type="primary" @click="onSubmit(formRef)">确认</el-button>
                        </div>
                    </div>
                </el-form>
            </div>
</template>

<script lang="ts">
import {reactive, ref, defineComponent} from 'vue';
import AxInputTest from '@/components/ax-input-test.vue'
export default defineComponent({
    name: "edit-user-confirm",
    components: {
        AxInputTest
    },
    emits: ['closeConfirm', 'saved'],
    setup(props, {emit}) {
        const formRules = reactive({
            nickName: [
                {
                    required: true,
                    message: '昵称不能为空',
                    trigger: 'blur',
                }
            ]
        });
        const userForm = reactive({
            nickName: ''
        });
        const onSubmit = (formRef) => {
            formRef.validate((valid) => {
                if (valid) {
                    //保存数据到接口
                }
            });
        };
        // 取消
        const onCancel = () => {
            emit('closeConfirm');
        }
        const formRef = ref(null);
        return {
            userForm,
            formRules,
            onSubmit,
            formRef,
            onCancel
        }
    }
})
</script>

 

原文地址:http://www.cnblogs.com/wangacan/p/16895397.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性