Vue-表单控件绑定

发布于 2020-02-26  233 次阅读


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Examples</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">

<script type="text/javascript" src="lib/vue.js"></script>
</head>
<body>
    <div id="box">

       <!-- <div v-model="dwa">
         
       </div> -->
       <input type="text" v-model="mytext"/>

        {{mytext}}

      
       <textarea v-model="mytext"></textarea>

       记住用户名:<input type="checkbox" v-model="isChecked"/>
       
       <br/>
       vue:<input type="checkbox" v-model="checkedgroup" value="vue"/>
       react:<input type="checkbox" v-model="checkedgroup" value="react"/>
       jquery:<input type="checkbox" v-model="checkedgroup" value="jquery"/>
    
       {{checkedgroup}}

       <br/>

       vue:<input type="radio" value="vue"  name="favorlan" v-model="picked"/>
       react:<input type="radio" value="react" name="favorlan" v-model="picked"/>
       jquery:<input type="radio" value="jquery" name="favorlan" v-model="picked"/>

       <button>confirm</button>
    </div>

    <!-- <div v-model=""></div> -->

    <script type="text/javascript">
    	
    	var vm = new Vue({
    		el:"#box",

    		data:{
              name:"xiaoming",
              mytext:"11111",
              isChecked:false,
              checkedgroup:[],//    
              picked:""
    		}
    	})

      
      /*
          v-model 绑定是 状态 跟 控件 value值或者checked

          多个多选框 绑定 需要绑定一个数组, 需要每个控件都有一个value值
       */
    </script>
</body>
</html>

购物车:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Examples</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">

<script type="text/javascript" src="lib/vue.js"></script>
</head>
<body>
    <div id="box">
      <input type="checkbox" @change="handleAllChecked()" v-model="isAllChecked"/>
      <ul>
        <li v-for="data in datalist" :key="data.id">
          <input type="checkbox" @change="handleChange()" v-model="checkgroup" :value="data"/>{{data}}

          <button @click="handleDelClick(data)">del</button>
          <input type="number" v-model="data.number"/>
          <button @click="handleAddClick(data)">add</button>
        </li>
      </ul>
      {{checkgroup}}
      <p>总金额{{sum}}</p>

      <p>计算属性总金额{{computedShopcarSum}}</p>
    </div>
   
    <script type="text/javascript">
    	
    	var vm = new Vue({
    		el:"#box",

    		data:{
              checkgroup:[],
              isAllChecked:false,
              sum:0,
              datalist:[
                {
                  name:"商品1",
                  price:10,
                  number:1,
                  id:"1",
                  // url:"https://www.baidu.com/img/bd_logo1.png?qua=high"
                },
                {
                  name:"商品2",
                  price:20,
                  number:2,
                  id:"2",
                  // url:"https://www.baidu.com/img/bd_logo1.png?qua=high"
                },
                {
                  name:"商品3",
                  price:30,
                  number:3,
                  id:"3",
                  // url:"https://www.baidu.com/img/bd_logo1.png?qua=high"
                }

              ]
    		},

        methods:{
          handleAllChecked(){
            console.log("处理多选按钮",this.isAllChecked);

            if(this.isAllChecked){
              this.checkgroup = this.datalist;
            }else{
              this.checkgroup = [];
            }

            this.computedsum();
          },

          handleDelClick(data){
            data.number--;
            if(data.number===0){
              data.number=1;
            }

            this.computedsum();
          },

          handleAddClick(data){
            data.number++;
            this.computedsum();
          },

          handleChange(){
            // console.log("111")
            if(this.checkgroup.length === this.datalist.length){
              console.log("全选中")
              this.isAllChecked = true;
            }else{
              console.log("没全选")
              this.isAllChecked = false;
            }


            this.computedsum();
          },

          computedsum(){
            console.log("重新计算总金额,关注已经勾选的数据,累加计算就可以了")
            var mysum = 0;
            for(var i=0;i<this.checkgroup.length;i++){
              mysum += this.checkgroup[i].number*this.checkgroup[i].price;
            }

            this.sum = mysum;
          }
        },

        computed:{
          computedShopcarSum(){
            var mysum = 0;
            for(var i=0;i<this.checkgroup.length;i++){
              mysum += this.checkgroup[i].number*this.checkgroup[i].price;
            }
            return mysum;
          }
        }

    	})


      /*
      
          checkbox 绑定是 数组, 需要设置value(动态绑定 :) ,
          value 对象

       */
      // var name="kerwin"
      // var obj = {
      //   name:name,
      //   getName:function(){

      //   }
      // }

      // var obj2= {
      //   name,
      //   getName(){

      //   }
      // }

    </script>
</body>
</html>

 

修饰符

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Examples</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">

<script type="text/javascript" src="lib/vue.js"></script>
</head>
<body>
    <div id="box">
       <input type="text" v-model.lazy="name" />
       {{name}}


       <input type="number" v-model.number="age"/>
       {{age}}

       
       <input type="text" v-model.trim="mytext"/>

       |{{mytext}}| 
    </div>
   
    <script type="text/javascript">
    	
    	var vm = new Vue({
    		el:"#box",

    		data:{
              name:"xiaoming",
              age:100,
              mytext:""
    		},
        watch:{

          name(){
            console.log("name改变了,-复杂运算")
          }
          
        }
    	})

      //语法糖
      // v-model  es5 get set拦截 ,input(input type=text) , change(checkbox)
      // 
      // polyfill 腻子粉
      // promsie -polyfill
      // fetch fetch polyfill
      // 
      // 轮子 (jquery 插件)
       
       
      // 兼容性 :https://caniuse.com
    </script>
</body>
</html>

 


注错之当