5.12v-model

v-model

表单控件在实际开发中是非常常见的. 特别是对于用户信息的提交, 需要大量的表单.

   

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

   

案例的解析:

   

当我们在输入框输入内容时

因为input中的v-model绑定了message, 所以会实时将输入的内容传递给message, message发生改变.

当message发生改变时, 因为上面我们使用Mustache语法, 将message的值插入到DOM中, 所以DOM会发生相应的改变.

所以, 通过v-model实现了双向的绑定.

当然, 我们也可以将v-model用于textarea元素

   

   

   

   

v-model原理

v-model其实是一个语法糖, 它的背后本质上是包含两个操作:

   

1.v-bind绑定一个value属性

   

2.v-on指令给当前元素绑定input事件

   

也就是说下面的代码: 等同于下面的代码:

   

<input type="text" v-model="message">

等同于

<input type="text" v-bind:value="message" v-on:input="message = $event.target.value">

   

v-model: radio

当存在多个单选框时

   

首先, label里的for跟input里的id必须一样; 其次, 2个radio的名字必须一样才能互斥. 如下图: v-model如果在2个radio里绑定的是同一个属性, 那么也能达到互斥的效果.

下图中 value可以使用v-bind绑定: :value="abc"

   

v-model: checkbox

复选框分为两种情况: 单个勾选框和多个勾选框

   

单个勾选框:

   

v-model即为布尔值.

此时input的value并不影响v-model的值.

多个复选框:

   

当是多个复选框时, 因为可以选中多个, 所以对应的data中属性是一个数组.

当选中某一个时, 就会将input的value添加到数组中.

   

lable好处就是用户可以点击文字也会选中

   

v-model: select

和checkbox一样, select也分单选和多选两种情况.

   

单选: 只能选中一个值.

   

v-model绑定的是一个值.

当我们选中option中的一个时, 会将它对应的value赋值到mySelect中

多选: 可以选中多个值.

   

v-model绑定的是一个数组.

当选中多个值时, 就会将选中的option对应的value添加到数组mySelects中

v-model绑定的对象如果不是数组,就一定会被默认成一个boolean值

   

值绑定:

   

:value, :for, :id都可以做值绑定

   

v-model双向绑定数组数据时遇到的天坑

<body>

<div id ="app">

<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>

   

<label v-for="item in originHobbies" :for="item">

<input type="checkbox" :value="item" :id="item" v-model="hobbies">{{item}}

</label>

 

</div>

   

<script>

//创建Vue实例,得到 ViewModel

var vm = new Vue({

el: '#app',

data: {

url:'<a href="http://www.baidu.com">百度一下</a>',

   

hobbies: [],

originHobbies:['篮球', '足球', '台球', '高尔夫球', '羽毛球'],

},

 

methods: {}

});

</script>

</body>

用Chrome浏览器

用360浏览器

查看了几个文档后发现是Chrome不兼容Object.observe

   

解决方法

   

使用 Vue.set(object, key, value) 方法将响应属性添加到嵌套的对象上. 还可以使用 vm.$set 实例方法, 这也是全局 Vue.set 方法的别名.

   

vue中遇到的坑 — 变化检测问题(数组相关)

   

深入响应式原理

   

也就是说, 因为360浏览器太老(没有更新)的原因, 没有废弃object.server, 所以才能够这样用. 现阶段只能使用vue.set

   

修饰符

lazy修饰符:

   

默认情况下, v-model默认是在input事件中同步输入框的数据的.

也就是说, 一旦有数据发生改变对应的data中的数据就会自动发生改变.

lazy修饰符可以让数据在失去焦点或者回车时才会更新:

number修饰符:

   

默认情况下, 在输入框中无论我们输入的是字母还是数字, 都会被当做字符串类型进行处理.

但是如果我们希望处理的是数字类型, 那么最好直接将内容当做数字处理.

number修饰符可以让在输入框中输入的内容自动转成数字类型:

trim修饰符:

   

如果输入的内容首尾有很多空格, 通常我们希望将其去除

trim修饰符可以过滤内容左右两边的空格

   

posted @ 2020-04-15 21:16  T-Rex  阅读(163)  评论(0)    收藏  举报