美文网首页
vue 学习之数据双向绑定

vue 学习之数据双向绑定

作者: 啊啊啊阿南 | 来源:发表于2018-12-21 15:29 被阅读0次

    表单输入绑定

    不用v-model的情况下实现双向绑定(v-on、v-bind)

    v-bind 将数据绑定到DOM节点上
    v-on 数据改变,触发事件,将DOM节点上的数据绑定到js数据上

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Page Title</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">      
            <input type="text" v-on:input="input" v-bind:value="value"/>
            <input type="text" v-on:input="input2" value="初始值"/>
        </div>
        <script>
            const app = new Vue({
                el: "#app",
                data: {                
                    value: 'chen',
                },
                methods: {              
                    input : function(event){
                        //IE 没有target只有srcElement   Firefox正好相反              
                        let target = event.target || event.srcElement;
                        this.value = target.value;
                        //value的值变化时会重新刷新视图  因此实现了双向绑定
                   },
                   input2 : function(event){                         
                        let target = event.target || event.srcElement;
                        console.log(target.value);
                        /*
                         *  value 属性为 input 元素设定值。
                         *  type="text", "password", "hidden" - 定义输入字段的初始值
                         *  
                         * 当input框中的内容有变化时target.value的值会变,但是检查元素时value的值还是初始值
                         */
                   }             
                }
            });    
        </script>    
    </body>
    </html>
    

    双向绑定 :v-model

    <input v-model="searchText" />
    <!--  相当于 -->
    <input  v-bind:value="searchText"
      v-on:input="searchText = $event.target.value" />
    
    <div id="app">
       {{ value }} typeof {{ typeof value}}
       <input type="text" v-model="input" value="value"/>
        注意: v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值
          而总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的 data 选项中声明初始值。
     </div>
     <script>
       const app = new Vue(
           el: "#app",
            data: {
                 value:  'chen',
             },         
        });   
    </script>
    
    

    注意:对于需要使用输入法 (如中文、日文、韩文等) 的语言,你会发现 v-model 不会在输入法组合文字过程中得到更新。如果你也想处理这个过程,请使用 input 事件。
    如图:
    image.png

    修饰符

    • 1、.lazy
      在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了输入法组合文字时)。你可以添加 lazy 修饰符,从而转变为使用 change事件进行同步(input框的change事件是input 框内容变化 ,失去焦点的时候才会触发;):
    <!-- 在“change”时而非“input”时更新 -->
    <input v-model.lazy="msg" >
    
    • 2、.number
      如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符:
    <input v-model.number="age" type="number">
    

    这通常很有用,因为即使在 type="number" 时,HTML 输入元素的值也总会返回字符串。如果这个值无法被 parseFloat() 解析,则会返回 原始 的值。

    • 2、.trim
      如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:
    <input v-model.trim="msg">
    

    相关文章

      网友评论

          本文标题:vue 学习之数据双向绑定

          本文链接:https://www.haomeiwen.com/subject/lvqmkqtx.html