v-model不指定名字只能有一个,指定名字可以任意个
不指定名字的v-model,多个值传递只能有一个model剩下的使用v-bind
<script>
const app = Vue.createApp({
data() {
return {
count : 1,
num : 1,
}
},
methods:{
handleChangeNum(n){
this.num = n;
}
},
template : `
<counter
v-model="count"
:num="num"
@change-num="handleChangeNum"
/>
`
});
app.component('counter',{
props: ['modelValue','num'],
methods: {
handleItemClick(){
this.$emit('update:modelValue',this.modelValue + 3);
},
handleItemClick1(){
this.$emit('changeNum',this.num + 1);
}
},
template : `
<div @click="handleItemClick"> 请点击 {{ modelValue }} </div>
<div @click="handleItemClick1"> 请点击 {{ num }} </div>
`
});
const vm = app.mount('#root');
</script>
指定名字 多个v-model
<script>
const app = Vue.createApp({
data() {
return {
count : 1,
num : 1,
}
},
template : `
<counter v-model:count="count" v-model:num="num" />
`
});
app.component('counter',{
props: ['count','num'],
methods: {
handleItemClick(){
this.$emit('update:count',this.count + 3);
},
handleItemClick1(){
this.$emit('update:num',this.num + 1);
}
},
template : `
<div @click="handleItemClick"> 请点击 {{ count }} </div>
<div @click="handleItemClick1"> 请点击 {{ num }} </div>
`
});
const vm = app.mount('#root');
</script>
v-model.修饰符="变量名"
<script>
const app = Vue.createApp({
data() {
return {
count : 'a',
}
},
template : `
<counter v-model.uppercase="count"/>
`
});
app.component('counter',{
props: {
'modelValue' : String,
'modelModifiers' : {
default : () =>({})
}
},
methods: {
handleItemClick(){
let newValue = this.modelValue + 'b';
if(this.modelModifiers.uppercase){
newValue = newValue.toUpperCase()
}
this.$emit('update:modelValue',newValue);
},
},
template : `
<div @click="handleItemClick"> 请点击 {{ modelValue }} </div>
`
});
const vm = app.mount('#root');
</script>