v-model 这个指令用于双向绑定 input 的值,比如下面有个 输入框,他的值就可以用v-model 来绑定:
<div id="app"> <input type="text" v-model = "message"> <h2>{{message}}</h2> </div> <script> const app = new Vue({ el:"#app", data:{ message:"您好! BiHu!" } }) </script>
你会发现 当你修改 输入框中的值的时候 ,底下的 标题也会跟着改变,因为这就是 "双向绑定",即 data 中的 message 修改 那么input的值也修改,当input 的值修改,data中的message也一样修改。
其实它的原理我们也可以做:
无非就是 v-bind 绑定 + 一个input 事件触发:
<div id="app"> <input type="text" :value="message" @input="message = $event.target.value" > <h2>{{message}}</h2> </div>
当然,我们也可以将v-model用于textarea元素【自己测试】
v-model 绑定 radio 使用:
如果我们用单选框 选择性别:
<div id="app"> <label for="M"> <input id="M" type="radio" value="男" name="sex"> 男 </label> <label for="F"> <input id="F" type="radio" value="女" name="sex"> 女 </label> <!-- 要达到互斥的效果 单选框的name需要一致 --> </div>
普通的选择代码就这样 ,注意 要达到互斥的效果 单选框的name需要一致 这些都是基础 你得懂。
如果你用v-model 去绑定:
<div id="app"> <label for="M"> <input id="M" type="radio" value="男" v-model="sex"> 男 </label> <label for="F"> <input id="F" type="radio" value="女" v-model="sex"> 女 </label> <h3>如果你用V-model绑定了值 sex,那么 你选择的sex是:{{sex}} <br> 而且你可以name属性 即可达到互斥的效果 </h3> </div> <script> const app = new Vue({ el:"#app", data:{ sex:"" //此时的sex为空 当然你想有默认值的话 可以是 男/女 {即radio的value} } }) </script>
功能我都一次性说完了。总结以下几点:
1. 可以不用name属性达到互斥单选
2.绑定后 可以随时用 胡须语法 查看选中的值
3.默认值可以直接在 绑定的变量中写 ,不用写原生 checked 属性.
5.响应式改变 sex的值 达到选中
v-model 绑定 checkbox 复选框:
这个复选框 原始的话 如果你选中 他的 checked 属性是为真的 ,反之为假:
我们来个例子(勾选已详细阅读 后 才能进入下一步操作):
<div id="app"> <div> 软件使用说明书 <br> xxxx............... <br> xxxx............. <br> <br> </div> <label> <input type="checkbox" v-model="already" > <!--因为是双向绑定 所以按下 already为true--> <span style="color: fuchsia"><b>已详细阅读</b></span> </label> <br><br> <button :disabled="!already">下一步</button> </div> <script> const app = new Vue({ el:"#app", data:{ already:false //一开始肯定是没阅读的 } }) </script>
你还可以打印一下 already 的值 会是 true 、 false 的。
这个是单个 而且绑定的变量初始化是 boolean型的 ,如果是多选框,那么就有特性要理清楚:
<div id="app"> <label> <input type="checkbox" value="篮球" v-model="hobby" > 篮球 <!--因为是双向绑定 所以按下 vue检测到v-model 绑定的类型是什么作出响应操作--> </label> <label> <input type="checkbox" value="羽毛球" v-model="hobby" > 羽毛球 </label> <label> <input type="checkbox" value="跑步" v-model="hobby" > 跑步 </label> <label> <input type="checkbox" value="跆拳道" v-model="hobby" > 跆拳道 </label> <h3> {{hobby}} </h3><!--打印一下hobby--> </div> <script> const app = new Vue({ el:"#app", data:{ already:false, //注意 already 是boolean型 hobby:[] //注意 hobby 是数组 } }) </script>
看代码可知,如果你绑定的是变量类型是 boolean 他就帮你操作 选中、未选中,但是如果是数组 他就帮你把这个 复选框的值 添加进去。
我发现 如果他识别不出你是什么类型【其他类型】 默认都按boolean来
v-model 绑定 select 选择框:
<div id="app"> <h3>请选择你喜欢吃的水果:</h3> <select name="fruit" id="fruit" v-model="fruit"> <!--注意啊 是在这里用v-model--> <option value="苹果">苹果</option> <option value="香蕉">香蕉</option> <option value="菠萝">菠萝</option> <option value="木瓜">木瓜</option> </select> <h3>{{fruit}}</h3> <!--打印一下--> </div> <script> const app = new Vue({ el:"#app", data:{ fruit:'香蕉', //可以调初始值 也可以为空(为空默认第一个) } }) </script>
当绑定的类型是 字符串 可以指定 值,但是 要对应 option 的 value 即可!!!
我们还可以多选 配和 数组 ,多选可以添加到数组中:
<div id="app"> <h3>请选择你喜欢吃的水果:</h3> <select name="fruit" id="fruit" v-model="fruits" multiple> <!--name 和 id 你自己换 /// multiple是多选属性 按住ctrl即可--> <option value="苹果">苹果</option> <option value="香蕉">香蕉</option> <option value="菠萝">菠萝</option> <option value="木瓜">木瓜</option> </select> <h3>{{fruits}}</h3> <!--打印一下数组--> </div> <script> const app = new Vue({ el:"#app", data:{ fruit:'香蕉', //可以调初始值 也可以为空(为空默认第一个) fruits:[] //这是个数组类型 } }) </script>
这个不怎么常用,会用即可
值绑定
其实这个原理就是 先定义好input的值,然后你把它遍历出来,通过绑定渲染出不同的值 和 不同的属性:
<div id="app"> <h3>请选择你喜欢的运动:</h3> <label v-for="item in hobby" :id="item"> <input type="checkbox" :value="item" v-model="choice">{{item}} </label> <h3>您已选择:{{choice}}</h3> </div> <script> const app = new Vue({ el:"#app", data:{ hobby:["跑步","游泳","跆拳道","睡觉"], //运动是可变的,如果你写在input 那么就写死了 choice:[], //已选择会存储在这 } }) </script>
原理很简单 自己看代码即可