vue 学习之数据双向绑定

2018-12-21  本文已影响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

修饰符

<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="msg" >
<input v-model.number="age" type="number">

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

<input v-model.trim="msg">
上一篇下一篇

猜你喜欢

热点阅读