zoukankan      html  css  js  c++  java
  • Vue(三)--v-model双向绑定

    一、表单绑定

    1.1、v-model基本使用

    Vue中使用v-model指令来实现表单元素和数据的双向绑定

    image

    解析:当我们在输入框输入内容时,因为input中的v-model绑定了message,所以会实时将输入的内容传递给message,message发生改变。当message发生改变时,因为上面我们使用Mustache语法,将message的值插入到DOM中,所以DOM会发生响应的改变。所以,通过v-model实现了双向的绑定

    也可以将v-model用于textarea元素:

    image

    1.2、v-model原理

    v-model其实是一个语法糖,它的背后本质上是包含两个操作:

    • 1.v-bind绑定一个value属性
    • 2.v-on指令给当前元素绑定input事件

    也就是说下面的代码:等同于下面的代码:

    <input type="text" v-model="message">
    等同于
    <input type="text" v-bind:value="message" v-on:input="message = $event.target.value">
    

    示例:

    <div id="app">
      <!--<input type="text" v-model="message">-->
      <!--<input type="text" :value="message" @input="valueChange">-->
      <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: '你好啊'
        },
        methods: {
          valueChange(event) {
            this.message = event.target.value;
          }
        }
      })
    </script>

    1.3、v-model结合radio类型

    image

    1.4、v-model结合checkbox类型

    <div id="app">
      <!--1.checkbox单选框-->
      <label for="agree">
        <input type="checkbox" id="agree" v-model="isAgree">同意协议
      </label>
      <h2>您选择的是: {{isAgree}}</h2>
      <button :disabled="!isAgree">下一步</button>
      <br><br>
    
      <!--2.checkbox多选框-->
      <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: '你好啊',
          isAgree: false, // 单选框
          hobbies: [], // 多选框,
        }
      })
    </script>

    image

    1.5、v-model结合select类型

    <div id="app">
      <!--1.选择一个-->
      <select name="abc" v-model="fruit">
        <option value="苹果">苹果</option>
        <option value="香蕉">香蕉</option>
        <option value="榴莲">榴莲</option>
        <option value="葡萄">葡萄</option>
      </select>
      <h2>您选择的水果是: {{fruit}}</h2>
    
      <!--2.选择多个-->
      <select name="abc" v-model="fruits" multiple>
        <option value="苹果">苹果</option>
        <option value="香蕉">香蕉</option>
        <option value="榴莲">榴莲</option>
        <option value="葡萄">葡萄</option>
      </select>
      <h2>您选择的水果是: {{fruits}}</h2>
    </div>
    
    <script src="../js/vue.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          message: '你好啊',
          fruit: '香蕉',
          fruits: []
        }
      })
    </script>

    image

    1.6、v-mode修饰符使用

    lazy修饰符:

    • 默认情况下,v-model默认是在input事件中同步输入框的数据的。
    • 也就是说,一旦有数据发生改变对应的data中的数据就会自动发生改变。
    • lazy修饰符可以让数据在失去焦点或者回车时才会更新:

    number修饰符:

    • 默认情况下,在输入框中无论我们输入的是字母还是数字,都会被当做字符串类型进行处理。
    • 但是如果我们希望处理的是数字类型,那么最好直接将内容当做数字处理。
    • number修饰符可以让在输入框中输入的内容自动转成数字类型:

    trim修饰符:

    • 如果输入的内容首尾有很多空格,通常我们希望将其去除
    • trim修饰符可以过滤内容左右两边的空格

    <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: '你好啊',
          age: 0,
          name: ''
        }
      })
    </script>

  • 相关阅读:
    win7下apache+mysql+php安装配置
    mysql -- 外键及数据的完整性
    mysql -- 索引的使用
    mysql 字符类型
    mysql 常用命令
    mysql 时间类型
    URI与URL
    Flask基本问题
    Session和Cookie的区别与联系
    Python flask关于新闻项目业务逻辑梳理
  • 原文地址:https://www.cnblogs.com/hujinzhong/p/13601372.html
Copyright © 2011-2022 走看看