Vue.js-v-model
1.1 v-model基本使用
Vue中使用v-model指令来实现表单元素和数据的双向绑定。
案例的解析
- 当输入框输入内容时,因为input中的v-model绑定了message。所以会实时将输入的内容传递给message,message发生改变。
- 当message发生改变时,因为上面我们使用Mustache语法,将message的值插入到DOM中,所以DOM会发生响应的改变。
- 所以,通过v-model实现了双向的绑定。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-model的基本使用</title>
</head>
<body>
<!--2.定义一个div元素-->
    <div id="app">
      <input type="text" v-model="message">
      <h2>{{message}}</h2>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      // 创建对象
      const app = new Vue({
        // 挂载要管理的元素
        el: '#app',
        // 定义数据
        data: {
          message: 'hello Vue.js!!!'
        }
      })
  </script>
</body>
</html>
执行结果
	
1.2 v-mode的原理
	
v-model其实是一个语法糖,它的背后本质上是包含两个操作
- v-bind绑定一个value属性。
- v-on指令给当前元素绑定input事件。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-model使用原理</title>
</head>
<body>
<!--2.定义一个div元素-->
    <div id="app">
      <!--输入和监听-->
      <input type="text" :value="message" @input="message = $event.target.value">
      <h2>{{message}}</h2>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      // 创建对象
      const app = new Vue({
        // 挂载要管理的元素
        el: '#app',
        // 定义数据
        data: {
          message: 'hello world!'
        },
        // 方法
        methods: {
          valueChange(event){
            this.message = event.target.value;
          }
        }
      })
  </script>
</body>
</html>
执行结果
	
1.3 v-model结合radio类型
当存在多个单选框时。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-model结合radio</title>
</head>
<body>
<!--2.定义一个div元素-->
    <div id="app">
     <label for="male">
       <input type="radio" id="male" value="男" v-model="sex">男
     </label>
      <label for="female">
        <input type="radio" id="female" value="女" v-model="sex">女
      </label>
      <h3>您选择的性别是:{{sex}}</h3>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      // 创建对象
      const app = new Vue({
        // 挂载要管理的元素
        el: '#app',
        // 定义数据
        data: {
          sex: '男'
        }
      })
  </script>
</body>
</html>
执行结果

1.4 v-mode结合单选框
单个勾选框
v-model即为布尔值,此时input的value并不影响v-model的值。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-mode结合单选框</title>
</head>
<body>
<!--2.定义一个div元素-->
    <div id="app">
     <label for="agree">
       <input type="checkbox" id="agree" v-model="isAgree">同意协议
     </label>
      <h2>你的选择是:{{isAgree}}</h2>
      <!--取反操作-->
      <button :disabled="!isAgree">下一页</button>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      // 创建对象
      const app = new Vue({
        // 挂载要管理的元素
        el: '#app',
        // 定义数据
        data: {
          message: 'hello world!',
          isAgree: false
        }
      })
  	</script>
</body>
</html>
执行结果

1.5 v-mode结合复选框
多个复选框
当是多个复选框时,因为可以选中多个,所以对应的data中属性是一个数组。
当选中某一个时,就会将input的value添加到数组中。
代码示例
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-mode结合复选框</title>
</head>
<body>
<!--2.定义一个div元素-->
    <div id="app">
      <input type="checkbox" value="篮球" v-model="hobbies">篮球
      <input type="checkbox" value="足球" v-model="hobbies">足球
      <input type="checkbox" value="乒乓球" v-model="hobbies">乒乓球
      <input type="checkbox" value="羽毛球" v-model="hobbies">羽毛球
      <h2>您的爱好是: {{hobbies}}</h2>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      // 创建对象
      const app = new Vue({
        // 挂载要管理的元素
        el: '#app',
        // 定义数据
        data: {
          message: 'hello world!',
          isAgree: false,
          hobbies:[]
        }
      })
  </script>
</body>
</html>
执行结果

1.6 v-model结合select类型
基本特点
单选:只能选中一个值。
- v-model绑定的是一个值。
- 当我们选中option中的一个时,会将它对应的value赋值到mySelect中
多选:可以选中多个值。
- v-model绑定的是一个数组。
- 当选中多个值时,就会将选中的option对应的value添加到数组mySelects中。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-model结合select类型</title>
</head>
<body>
<!--2.定义一个div元素-->
    <div id="app">
      <!--选择一个-->
      <select name="abc" v-model="fruit">
        <option value="苹果">苹果</option>
        <option value="香蕉">香蕉</option>
        <option value="榴莲">榴莲</option>
        <option value="葡萄">葡萄</option>
      </select>
      <h3>您选择的水果是:{{fruit}}</h3>
      <!--多选择-->
      <select name="abc" v-model="fruits" multiple>
        <option value="苹果">苹果</option>
        <option value="香蕉">香蕉</option>
        <option value="榴莲">榴莲</option>
        <option value="葡萄">葡萄</option>
      </select>
      <h3>你选择的水果是:{{fruits}}</h3>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      // 创建对象
      const app = new Vue({
        // 挂载要管理的元素
        el: '#app',
        // 定义数据
        data: {
          fruit: '香蕉',
          fruits: []
        }
      })
  </script>
</body>
</html>
执行结果

1.7 值绑定
值绑定就是动态的给value赋值而已。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>值绑定</title>
</head>
<body>
      <div id="app">
        <label v-for="item in originHobbies" :for="item">
          <input type="checkbox" :value="item"  v-model="hobbies">{{item}}
        </label>
        <h3>您的爱好是: {{hobbies}}</h3>
      </div>
      <script src="../js/vue.js"></script>
      <script>
        // 创建对象
        const app = new Vue({
          // 挂载要管理的元素
          el: '#app',
          // 定义数据
          data: {
            hobbies: [],
            originHobbies: ['篮球', '足球', '乒乓球', '羽毛球', '台球', '高尔夫球']
          }
        })
    </script>
</body>
</html>
执行结果

1.8 v-model修饰符
lazy修饰符
- 默认情况下,v-model默认是在input事件中同步输入框的数据的。
- 也就是说,一旦有数据发生改变对应的data中的数据就会自动发生改变。
- lazy修饰符可以让数据在失去焦点或者回车时才会更新。
number修饰符
- 默认情况下,在输入框中无论我们输入的是字母还是数字,都会被当做字符串类型进行处理。
- 但是如果我们希望处理的是数字类型,那么最好直接将内容当做数字处理。
- number修饰符可以让在输入框中输入的内容自动转成数字类型。
trim修饰符
如果输入的内容首尾有很多空格,通常我们希望将其去除,trim修饰符可以过滤内容左右两边的空格。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-model修饰符作用</title>
</head>
<body>
    <div id="app">
      <!--1.修饰符:lazy可以让数据在失去焦点或者回车时才会更新-->
      <input type="text" v-model.lazy="message">
      <h2>{{message}}</h2>
      <!--2.修饰符:number可以让在输入框中输入的内容自动转成数字类型-->
      <input type="number" v-model.number="age">
      <h2>{{age}}-{{typeof age}}</h2>
      <!--3.trim修饰符可以过滤内容左右两边的空格-->
      <input type="text" v-model.trim="name">
      <h2>你输入的名字:{{name}}</h2>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      // 创建对象
      const app = new Vue({
        // 挂载要管理的元素
        el: '#app',
        // 定义数据
        data: {
          message: 'hello Vue.js!!!',
          age: 0,
          name: ''
        }
      })
  </script>
</body>
</html>
执行结果

 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号