vue的数据双向绑定:v-model

1、语法

  • 基本语法: v-model.修饰符="data数据仓库中的变量"
    • 修饰符: lazy 
      • lazy: 将v-model的绑定事件由input改为change,
      • number:将输入的数据转换为number类型数据
      • trim: 将输入的数据去除首尾空格
    • data数据仓库中的变量
      • 只能是基础类型(string,number,boolean),或者是复杂类型里面的单个属性或者单个元素
      • 不能使用简单表达式比如四则元素或者字符串拼接
    • 只能被用在输入型表单元素标签上,以及vue的组件上
    <div id="app">
        <p>{{ info }}</p>
        <input type="text" v-model="info">
        <input type="text" v-model="user.name">
        <input type="text" v-model="arr[0]">
    </div>
    <script>
        new Vue({
            el:"#app",
            data:{
               info: '测试数据',// 字符串
               //info: 123, //数值
               //info: true,
               user:{
                 name:'tom'
               },
               arr:[1,5,9,10]
            }
        }) 
    </script>

2、原理:属性绑定,事件绑定

  • input单行文本框: type = "text" | "color " | "range" | "date"
    • 事件绑定: @input 
    • 属性绑定: v-bind:value="属性值"
    <div id="app">
        <!-- type=text文本 -->
        <p>{{ inputText }}</p>
        <input type="text" :value="inputText" @input="setText($event)" >

        <!-- 根据拾色器更改文字颜色 -->
        <p :style="'color:'+inputColor">inputColor</p>
        <input type="color" :value="inputColor" @input="setColor($event)">
    </div>
    <script>
        new Vue({
            el:"#app",
            data:{
               inputText: '测试数据',// 字符串
               inputColor:'#000000'
            },
            methods:{
                setText(e){
                    this.inputText = e.target.value;
                },
                setColor(e){
                    this.inputColor = e.target.value;
                }
            }
        }) 
    </script>

 

  • textarea文本域
    • 事件绑定: @input 
    • 属性绑定: v-bind:value="属性值"
    • textarea标签上没有value属性,但它的DOM属性中有value属性,在textarea的正反标签中写值,实际上是往textarea的DOM属性innerHTML和textContent赋值,同时也会往复制一份值给DOM属性value 
    • 当我们修改textarea中的DOM属性value的值时,DOM属性的innerHTML和innerText并不会发生更改,即查看控制台element中的textarea元素正反标签中的值不会发生更改,但页面展示内容会更改成value的新值
  • select下拉选框
    • 事件绑定:@change
    • 属性绑定: v-bind:value
    • select的选中值 当前选中的option存在value时返回value值,不存在value返回innerHTML
    <div id="app">
        <select name="" id="" @change="setSelect($event)" :value="selectText">
            <option value="1">1</option>
            <option value="2">2</option>
        </select>
    </div>
    <script>
        new Vue({
            el:"#app",
            data:{
                selectText:"2"
            },
            methods:{
                setSelect(e){
                    this.selectText = e.target.value;
                }
            }
        }) 
    </script>
  • input:"radio"单选按钮
    • 事件绑定:@change
    • 属性绑定:v-bind:checked : 该属性值来自于单选按钮的value值和内存中的值的比较结果
    • 如果单选按钮不提供value,内存值会变成null
    <div id="app">
        <input type="radio" value="1" name="ro" :checked="'1' == radioText" @change="setRadioText($event)">
        <input type="radio" value="2" name="ro" :checked="'2' == radioText" @change="setRadioText($event)">
        <input type="radio" value="3" name="ro" :checked="'3' == radioText" @change="setRadioText($event)">
    </div>
    <script>
        new Vue({
            el:"#app",
            data:{
                radioText:'2'
            },
            methods:{
                setRadioText(){
                    this.radioText = e.target.value;
                }
            }

        }) 
    </script>
  • Input:"checkbox"复选框
    • 事件绑定: @change
    • 属性绑定: v-bind:checked
    • 如果复选框不提供value,内存值会变成null
    <div id="app">
        <input type="checkbox" value="1" :checked="checkboxText.indexOf('1')?false:true" @change="setCheckBoxText($event)">
        <input type="checkbox" value="2" :checked="checkboxText.indexOf('2')?false:true" @change="setCheckBoxText($event)">
        <input type="checkbox" value="3" :checked="checkboxText.indexOf('3')?false:true" @change="setCheckBoxText($event)">
    </div>
    <script>
        new Vue({
            el:"#app",
            data:{
                checkboxText:[]
            },
            methods:{
                setCheckBoxText(e){
                    if(this.checkboxText.indexOf(e.target.value) == -1){
                        this.checkboxText.push(e.target.value);
                    }else{
                        this.checkboxText.splice(this.checkboxText.indexOf(e.target.value),1);
                    }
                }
            }

        }) 
    </script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值