iview表单中,如何取消对 disabled的控件的验证?

根据控件是否禁用,开启或者关闭该控件的必须项检查。图片描述

   <Form-Item prop="link_address" :show-message="!disableLinkAddress" label="链接地址">
        <i-Input :disabled="disableLinkAddress" placeholder="Enter something..." v-model="formModel.link_address" ></i-Input>
    </Form-Item>    
    <Form-Item prop="menu_name" label="菜单名称">
        <i-Input type="text" placeholder="Username" v-model="formModel.menu_name">
            <Icon type="ios-person-outline" slot="prepend"></Icon>
        </i-Input>
    </Form-Item>

disableLinkAddresstrue时,不对链接地址这个控件做检查
disableLinkAddressfalse时,对链接地址这个控件做检查



    formRules: {
                menu_name: [{required: true, trigger: 'blur'}],
                link_address: [{required: true, message: '链接地址不能为空', trigger: 'blur'}]}


    watch: {
        'formModel.parent_menu_seq': function (newValue, oldValue) {
            var self = this;
            if (newValue == 0) {
                self.disableLinkAddress = true;
                self.formRules['link_address'].pop()
            } else {
                self.disableLinkAddress = false;
                self.$nextTick(function () {
                    self.formRules['link_address'].push({required: true, message: '链接地址不能为空', trigger: 'blur'})
                })
            }
        }
    },

我目前的做法是

    watch: {
        disableLinkAddress: function (newValue, oldValue) {
            var self = this;
            if (newValue) {
                self.formRules['link_address'] = [{required: false, trigger: 'blur'}]

            } else {
                self.formRules['link_address'] = [{required: true, message: '链接地址不能为空', trigger: 'blur'}]

            }
        }
    },

但是这样做有个问题,trigger: 'blur'失效了,焦点离开控件后,validate不能自动触发了。
请教解决思路和方法。

阅读 8.5k
2 个回答

我的做法是自定义validator,如果检测到你这里的是‘disableLinkAddress’为true,就直接callback();否则才进行校验;

新手上路,请多包涵

禁用以后$nexttick里面 validate一次就好了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题