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

v-model指令实现表单元素和数据的双向绑定

1、v-model的原理

v-model其实就是一个语法糖。它的本质包含两个操作:

  • 用v-bind绑定一个value属性
  • 用v-on给当前元素添加一个input事件
<input type="text" v-model="message">
等同于
<input type="text" :value="message" @input="message = $event.target.value">

实例如下:

<div id="app">
<!--<input type="text" v-model="message">-->
<!--input标签有一个input事件监听用户的输入-->
<!--valueChange默认传值$event-->
<!--<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>

2、v-model与radio类型结合使用

实例:

<div id="app">
<!--name为一样的值,这样就只能选择一项-->
<!--如果两个单选框绑定一个值,则不需要name属性,也能实现只能选择其中一项的效果-->
    <label for="male">
	<!--<input type="radio" id="male" name="sex" value="男" v-model="sex">男-->
        <input type="radio" id="male" value="" v-model="sex"></label>
    <label for="female">
        <input type="radio" id="female" name="sex" value="" v-model="sex"></label>
    <h2>您选择的性别是:{{sex}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
    const app = new Vue({
       el: '#app',
       data: {
           sex: '男'
       }
    });
</script>

3、v-model与checkbox类型结合使用

checkbox类型包含单选框和多选框两种:

  • 单选框:v-model即为布尔值;此时input的value值并不影响v-model的值
  • 多选框:当是复选框时,可以选择多个,它对应的数据data中的属性是一个数组,当选中某一个时,就会将input的value值添加到数组中
    实例:
<div id="app">
    <!--1.checkbox单选框-->
<!--    <label for="licence">-->
<!--        <input type="checkbox" id="licence" v-model="isAgree">同意协议-->
<!--    </label>-->
<!--    <h2>您选择的是: {{isAgree}}</h2>-->
<!--    <button :disabled="!isAgree">下一步</button>-->
    <!--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: {
            isAgree: false,
            hobbies: []
        }
    });
</script>

4、v-model与select类型结合使用

与checkbox类型类似:也存在单选和多选两种情况
实例:

<div id="app">
<!--1.选择一个-->
    <select name="abc" id=""  v-model="fruit">
        <option value="苹果">苹果</option>
        <option value="香蕉">香蕉</option>
        <option value="水蜜桃">水蜜桃</option>
        <option value="橘子">橘子</option>
    </select>
    <h2>您选择的水果是: {{fruit}}</h2>
<!--选择多个-->
    <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>

5、v-model修饰符

  1. lazy修饰符:可以让数据在失去焦点或点击回车时才更新
  2. number修饰符:可以让输入框中输入的内容自动转为数字类型
  3. 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: 18,
            name: ''
        }
    });
</script>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值