v-model 双向绑定

(1)基本用法

用 v-model 指令在表单 <input><textarea> 及 <select> 元素上创建双向数据绑定。负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。

v-model 会忽略所有表单元素的 valuecheckedselected 特性的初始值而总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的 data 选项中声明初始值。

<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>

(2)修饰符

1.在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步。你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:(.lazy)

<input v-model.lazy="msg" >

2. 自动将用户的输入值转为数值类型(. number )

<input v-model.number="age" type="number">

因为即使在 type="number" 时,HTML 输入元素的值也总会返回字符串。如果这个值无法被 parseFloat() 解析,则会返回原始的值。

3. 自动过滤用户输入的首尾空白字符(.trim)

<input v-model.trim="msg">

(3)自定义 v-model

v-model本质上是 :value 和 v-on 的结合体,就是绑定他的value,通过v-on触发,从而更新数据。

1.input 使用了 :value 而不是 v-model

2.change 和 model.event 中是对应的

3.props 中的 text 属性、model 中 prop 以及 :value 要对应起来

<input type="text" :value="text" @input="$emit('change', $event.target.value)">

export default {
    model: {
        prop: 'text',  // 对于 props text
        event: 'change'
    },
    props: {
        text: String,
        default() {
            return ''
        }
    }
}

如何使用呢?

<CustomVModel v-model="name" />

(4)双向数据绑定 v-model 的实现原理

主要依赖于Object.defineProperty(),通过这个函数可以监听到get,set事件,通知订阅者,触发update方法,从而实现更新视图。

1.input 元素的 value = this.name

2.绑定 input 事件 this.name = $event.target.value

3.data 更新触发 re-render

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值