Tmiracle
用爱学IT,用心写BUG
OPEN BLOG ->

el-form 自定义一个非输入选择的值的规则,但是无法生效的问题

假设我们有以下结构:

vue
<template>
    <el-form ref="formRef" :model="form" :rules="rules">
        <el-form-item label="输入框" prop="input">
            <el-input v-model="form.input"/>
        </el-form-item>
        <el-form-item label="选择器" prop="select">
            <el-select v-model="form.select">
                <el-option label="1" value="1"/>
                <el-option label="2" value="2"/>
            </el-select>
        </el-form-item>
        <el-form-item label="自定义" prop="customize">
            <CustomizeComponent v-model="form.customize"/>
        </el-form-item>
    </el-form>
</template>

<script>
    export default {
        data() {
            return {
                form: {
                    input: '',
                    select: '',
                    customize: []
                },
                rules: {
                    input: [
                        { required: true, message: '请输入应急联系人', trigger: 'change' }
                    ],
                    select: [
                        { required: true, message: '请输入应急联系人', trigger: 'change' }
                    ],
                    customize: [
                        {
                            required: true,
                            trigger: 'change',
                            validator: (rule, value, callback) => {
                                console.log('--->', value)
                                if (value.length === 0) {
                                    callback('数组不能能为空')
                                } else {
                                    callback()
                                }
                            }
                        }
                    ]
                }
            }
        },
        methods: {
            verify() {
                this.$refs.formRef.validate(/* ... */)
            }
        }
    }
</script>

这里,给一个 form 的属性 customize 定义了一个规则,期望它能像其他两个规则一样正常触发校验

但是,事与愿违,customize 虽然会触发校验,但是 console.log 打印出来的值永远不会变,永远都是 [], 不管你是否改变了 customize 的值

想要正常触发,应该直接使用 this.form.customize 代替 value

js
customize: [
    {
        required: true,
        trigger: 'change',
        validator: (rule, value, callback) => {
            console.log('--->', this.form.customize)
            if (this.form.customize.length === 0) {
                callback('数组不能能为空')
            } else {
                callback()
            }
        }
    }
]

只有这样才能正常触发一个自定义的值的校验

最后更新于:

前端

Element-UI & Element-Plus

🔹

el-form 自定义一个非输入选择的值的规则,但是无法生效的问题