在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 則報錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM