账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Element 动态切换表单项验证规则传入prop的赋值与清空问题(已解决但不明原因)。
    29
    0

    问题描述

    实现目标:表单项2选1,切换禁用,同时将禁用的表单项的规则去掉。
    方法:通过计算属性绑定动态prop。
    在线demo:http://js.jirengu.com/juheyuz...

    问题出现的环境背景及自己尝试过哪些方法

    vue+element。
    根据单选框选中的值切换 prop值 为 规则rules里的字段(增加)或者 空字符串(去除)。

    相关代码

    // 请把代码文本粘贴到下方(请勿用图片代替代码)

    <!DOCTYPE html>
    <html>
    <head>
    <meta name="description" content="vue项目演示" />
      <meta charset="utf-8">
      <title>JS Bin</title>
      <link rel="stylesheet" href="http://unpkg.com/element-ui@2.4.11/lib/theme-chalk/index.css">  
      <script src="//unpkg.com/vue/dist/vue.js"></script>
      <script src="//unpkg.com/element-ui@2.4.11/lib/index.js"></script>
    </head>
    <body>
      <div id="app">
        <div @click="submit1" style='width:100px;cursor:pointer;'>点我</div>
        <el-form :model="form" label-width="100px" :rules="rules" ref="form">
          <el-row>
            <el-col :span="10">
              <el-form-item label="问题类别:" :prop="itemIdchange">
                <el-radio v-model="qiehuan" label="1" @change="ss">&nbsp;</el-radio>
                <el-select v-model="form.itemId" placeholder="请选择" :disabled="qiehuanJJ">
                  <el-option label="项目基础类" value="00000000-0000-0000-0000-000000000001"></el-option>
                  <el-option label="技术架构类" value="00000000-0000-0000-0000-000000000002"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="10">
              <el-form-item label="项目:" :prop="itemIdchange1">
                <el-radio v-model="qiehuan" label="2" @change="ss">&nbsp;</el-radio>
                <el-select v-model="form.otherId" filterable placeholder="请选择项目" :disabled="!qiehuanJJ">
                  <el-option label="测试1" value="1"></el-option>
                  <el-option label="测试2" value="2"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
      </div>
    <script>
     var Main = {
        data() {
          return {
             rules: {
               itemId: [
                 { required: true, message: '请选择问题类别', trigger: 'change' },
               ],
               otherId: [
                 { required: true, message: '请选择项目', trigger: 'blur' },
               ],
             },
            qiehuanJJ:false,
            form: {
              itemId:'',
              otherId:'',
            },
            qiehuan:'1',
          };
        },
       computed: {
         itemIdchange: function () {
           return this.qiehuan == '1' ? 'itemId' : '';
         },
         itemIdchange1: function () {
           return this.qiehuan == '2' ? 'otherId' : '';
         }
       },
       watch: {
         itemIdchange: function(a,b){
           console.log(a,b,'左边prop 新值 -- 旧值')
         },
         itemIdchange1: function(a,b){
           console.log(a,b,'右边prop 新值 -- 旧值')
         },
         qiehuan: function(a,b){
           console.log(a,b,'单选框值 新值 -- 旧值')
         }
       },
       methods: {
         ss(){
           this.$refs['form'].clearValidate();
           if (this.qiehuan == '1') {
             this.qiehuanJJ = false;
           }else {
             this.qiehuanJJ = true;
           }
         },
         submit1(){
           this.$refs['form'].validate((valid)=>{
             if(valid){
               console.log('success')
             }else {
               console.log('faild')
             }
           })
         },
       }
     };
    var Ctor = Vue.extend(Main)
    new Ctor().$mount('#app')
    </script>
    </body>
    </html>
    

    你期待的结果是什么?实际看到的错误信息又是什么?

    已经通过别的方式解决,也发现了这个问题所在是因为 prop的传入初始值必须是非空字符串(就算是rules里面没有定义的都行)。所以真正的问题是不明白为什么 初始prop不能为空字符串。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部