Vue 之v-model 详解
自定义事件也可以用于创建支持 v-model 的自定义输入组件。记住:<input v-model="searchText">等价于:<inputv-bind:value=&am
·
自定义事件也可以用于创建支持 v-model 的自定义输入组件。记住:
<input v-model="searchText">
等价于:
<input
v-bind:value="searchText"
v-on:input="searchText = $event.target.value"
>
当用在组件上时,v-model 则会这样:
<custom-input
v-bind:value="searchText"
v-on:input="searchText = $event"
></custom-input>
为了让它正常工作,这个组件内的 <input>
必须:
- 将其 value 特性绑定到一个名叫 value 的 prop 上
- 在其 input 事件被触发时,将新的值通过自定义的 input 事件抛出
$event 便是组件内部使用input事件抛出一个值
写成代码之后是这样的:
Vue.component('custom-input', {
props: ['value'],
template: `
<input
v-bind:value="value"
v-on:input="$emit('input', $event.target.value)"
>
`
})
然后 v-model 就应该可以在这个组件上生效:
<custom-input v-model="searchText"></custom-input>
v-model 比较之 input VS component
- 二者都会在各自自身元素(或组件)上绑定动态特性
value
,‘监听’ input事件 - input元素上是本身有input事件,其调用逻辑返回的是事件目标本身的值
$event.target.value
(dom节点上的值),此时$event代表组件实例的事件对象 组件元素,其input事件逻辑返回值 接受的其实是组件内部 事件抛出一个值!!!
$event
补充:每个vue实例都实现了Events interface
- vue的自定义事件系统分离自浏览器的EventTarget API
- 事件 Event 数据对象
- 事件发送者 Event dispatcher
- 接收事件的对象 Event listener
- 注册 - > 发送(派发) -> 侦听 -> 移除
- 事件模型 冒泡,目标,捕获
更多推荐
已为社区贡献6条内容
所有评论(0)