v-model原理,在“radio”、“checkbox”、“select”、修饰符

目录

v-model基本原理

v-mode在单选框“radio”的使用

v-mode在复选框“checkbox”的使用

v-mode在复选框的多选使用

v-mode在select的使用

v-model的修饰符

v-model基本原理

        首先,介绍一个函数oninput(),即只要在input中输入内容就会触发

        v-model的基本原理就是基于oninput,这里用v-on简写的方式绑定“input”=> @input = 'change ',为了实现数据由页面和data数据库的双向流动,将input的value属性动态绑定=> :value='msg'

,change()函数没有调用之前,只能实现单向动态数据绑定=> 数据从data数据库流向页面,change()目的是为了实现页面数据流向data数据库。进而实现数据的双向流动。

        change(e)是为了接受input输入的值,e是input,通过e.target.value获取输入的值。

<body>
    <div id="app">
        <label for="acount">账号</label>
        <input type="text" id="acount" :value="msg" @input="change">
        {{msg}}
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data() {
                return {
                    msg: '无名的人'
                }
            },
            methods: {
                change(e){
                    console.log(1);
                    this.msg = e.target.value;
                }
            }
        });
    </script>
</body>

 使用v-model实现数据的双向流动,与上面实例相同,仅仅是直接用一个v-model就可以了,默认传递input的value。

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <input type="text" v-model="msg">
        <h2>{{msg}}</h2>
    </div>
    <script>
        let vm = new Vue({
            el: '#app',
            data(){
                return{
                    msg:'无名之辈'
                }
            }
        })
    </script>

v-mode在单选框“radio”的使用

        直接使用v-model是不行的,因为单选框没有value值,如果输出value是null。解决办法是我们在写的时候加一个value值,使得能让v-model成功传递。这里给了一个初始值=“男”,没有什么影响。同时-model还自带排他属性,不会使得两个单选框同时选中。

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <label for="male">
            <input type="radio" value="男" v-model="sex" id="male">男
        </label>
        <label for="female">
            <input type="radio"  value="女" id="female" v-model="sex">女
        </label>
        <h2>您选择的性别是:{{sex}}</h2>
    </div>
    <script>
        let vm = new Vue({
            el: '#app',
            data(){
                return{
                    sex: '男'
                }
            }
        })
    </script>

v-mode在复选框“checkbox”的使用

        checkbox复选框传递给v-model的值时true或false,勾选或取消复选框true或false从页面流向data数据库,data中isagree的值改变(此时监听事件也生效,打印值),isagree的值又流向页面,页面动态绑定了button中的disabled,实现button的可用和禁用。

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <label for="agree">
            <input type="checkbox" name="" id="agree" v-model="isagree">
            同意协议
        </label>
        <div style="margin: 10px 0 0 0;">
            <button :disabled = '!isagree'>下一步</button>
        </div>
    </div>
    <script>
        let vm = new Vue({
        el: '#app',
        data(){
            return{
                isagree: false
            }
        },
        //监听一下isagree值的改变情况
        watch:{
            isagree(n){
                console.log(n);
            }
        }
    })
    </script>

v-mode在复选框的多选使用

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <label for="item" v-for="(item,index) in hobbies" :key="item">
            <input type="checkbox"  :id="item" :value="item" v-model="hhobbies">{{item}}
        </label>
        <h2>{{hhobbies}}</h2>
    </div>
    <script>
        let vm = new Vue({
            el: '#app',
            data(){
                return{
                    hhobbies:[],
                    hobbies: ["篮球", "足球", "乒乓球", "羽毛球"],
                }
            }
        })
    </script>

v-mode在select的使用

        这里v-model传递的值是option的value

    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <select name="" v-model="fruit">
            <option value="香蕉">香蕉</option>
            <option value="苹果">苹果</option>
            <option value="橘子">橘子</option>
        </select>
       <h2>您选择的水果是:{{fruit}}</h2>

    </div>
    <script>
        let vm = new Vue({
            el: '#app',
            data(){
                return{
                    fruit:'香蕉',
                }
            }
        })
    </script>

v-model的修饰符

        lazy:默认情况下是实时更新数据,加上lazy,从输入框失去焦点,按下enter都会更新数据。

        number:默认是string类型,使用number复制为number类型。

        trim:用于自动过滤用户输入的首尾空白字符。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
              <input type="text" v-model.lazy="message" />
			  <h2>{{message}}</h2>
			  <input type="text" v-model.number="age" />
			  <h2>{{age}}---{{typeof age}}</h2>
			  
			  <input type="text" v-model.trim="name" />
			  <h2>{{name}}</h2>
		</div>
		<script>
			const vm = new Vue({
				el: '#app',
				data() {
					return {
						message: "zzz",
						age: 18,
						name: "ttt"
					}
				}

			})
		</script>
	</body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值