近期写了一个简单的checkbox组件,其中关于v-model的相关使用,把本身坑了一下,显然是基础太差,因而经过查阅文档和网上大佬的文章,简单本身总结下v-model的使用,以及简单描述下checkbox组件的开发。vue
引用官网上的介绍:bash
你能够用
v-model
指令在表单<input>
、<textarea>
及<select>
元素上建立双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。
ui
v-model
在内部为不一样的输入元素使用不一样的属性并抛出不一样的事件:
text 和 textarea 元素使用value
属性和input
事件;
checkbox 和 radio 使用checked
属性和change
事件;
select 字段将value
做为 prop 并将change
做为事件。
看文字永远都是晦涩难懂的,直接上代码看看:spa
<input v-model="message" >
/** 上面代码实际至关于:
<input :value="message" @input="e => message = e.target.value" placeholder="edit me">
**/
<p>Message is: {{ message }}</p>复制代码
实际上v-model至关于作了两件事:一是经过v-bind:value将对应的值传过去,另外一个是绑定input默认事件,用于修改值。code
一样道理,对于checkbox来讲事件
<input type="checkbox" id="checkbox" v-model="checked">
/** 上面代码实际至关于:
<input type="checkbox" id="checkbox" :checked="checked" @change="e => checked = e.target.checked">
**/复制代码
以上说的都是简单的调用方式,当v-model用到组件上时,咱们再来看下开发
好比咱们写一个checkbox的组件,而后在父组件调用能够这么写:文档
//====子组件Checkbox
<template> <div> <input type="checkbox" :checked="value" @change="$emit('input', $event.target.checked)" /> <label :for="label">{{ label }}</label> </div></template>
props: ['value']
//====父组件<Checkbox v-model="checkStr"></Checkbox>...
data(){
return {
checkOne: {label: '手机', value: 10},
checkStr: '' }
}复制代码
能够看到父组件调用的时候咱们只传了一个v-model,可是在子组件上咱们分别引入了checked和一个父级的input事件,其实原理同上,给组件添加 v-model 属性时,默认会把 value 做为组件的属性,而后把 'input' 值做为给组件绑定事件时的事件名。get
在vue2.2版本以后,加入了model属性,使用起来更加方便,包括两个属性:prop和event,分别表明着属性名和事件名,咱们可使用本身的名字单独定义~input
//====子组件Checkbox
<template>
<div>
<input type="checkbox" :checked="propVal" @change="$emit('changes', $event.target.checked)" /> <label :for="label">{{ label }}</label>
</div>
</template>
props: ['propVal']model: {
prop: 'propVal',
event: 'changes'
}
//====父组件<Checkbox v-model="checkStr"></Checkbox>...
data(){
return {
checkOne: {label: '手机', value: 10},
checkStr: '' }
}复制代码
此时不管父组件传什么值进来,咱们均可以经过从新定义,在组件内部本身调用。
以上是本身的理解,语言表达好像比较差,不太理解的能够去看看文档,本身写一下就行了~后面会把简单的checkbox组件代码贴出来,但愿各位大佬多多指教。