在vue中 input的v-model和computed一起使用出现的问题

问题描述:input 输入框, 绑定计算属性时,没法双向响应,可以和value绑定,再通过input事件,获取dom的value。

解决办法1

用computed,不用v-model

 单号: 
 <el-input  id="orderNumValue" :value.trim="orderNum" 
    placeholder="请输入" size="mini" style="width:75px">
  </el-input >//这是element-ui的input组件
input
<script>
computed: {
    
     orderNum(){//历史信息单号
      
      switch(this.problemTypesOrder){
        case "first":
        return this.formData1.billCode;
        break;
        case "second":
        return this.formData2.billCode;
        break;
        case "four":
        return this.formData4.orderCode;
        break;
        default:
         return this.formData1.billCode;
      }
     }
}
 methods: {
     upData(){
      console.log($("#orderNumValue").val())//通过dom的value值,
      获取value,操作数据
    }
}
</script>

解决办法2

用watch,和v-model,不用computed

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
</head>
<body>
  <div id="app">
    <input id="wang" type="text" v-model="m.a" @input="fun"> 
    {{m.a}}
    <br>
   <input type="text" v-model = "n">
    {{n}}

  </div>
</body>
  
 <script src="https://sv-source.zt-express.com/gongdan/js/vue.min.js"></script>
 
  <script>
 
  console.log(new Date())
    new Vue({
      el: '#app',
      data: function() {
        return { 
          m:{a:"m"},
          n:0
         }
      },
      methods: {
          fun(val){
            console.log(this)
            this.$set(this.m,"a",wang.value)
          }
        },
        watch:{
          m:{
            deep: true,
            handler: function (newVal,oldVal){
                this.n = newVal.a
            }
          }
        }

    })
  </script>
</html>

解决办法3

用computed 的get和set

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
 
</head>
<body>
  <div id="app">
    <input id="wang" type="text" v-model="m.a" > 
    {{m.a}}
    <br>
   <input type="text" v-model = "wangNum2">
    {{wangNum2}}

  </div>
</body>
 
<script src="https://sv-source.zt-express.com/gongdan/js/vue.min.js"></script>

  <script>
 
  console.log(new Date())
    new Vue({
      el: '#app',
      data: function() {
        return { 
          m:{a:"m"},
          // n:0
         }
      },
      methods: {
          
        },
        computed:{
          wangNum1(){//没有重写时
            return this.m.a
          },
          wangNum2:{//重写方法
            get(){
                return this.m.a
            },
            set(val){
                console.log(val)
                this.m.a = val
            }
          }
        }

    })
  </script>
</html>

 

因为 v-model 是双向绑定的缘故,使用 computed 若不同时加 get 和 set 则报错。

posted @ 2020-07-02 11:08  沐子馨  阅读(3620)  评论(0编辑  收藏  举报