1. 概述

洛克定律告诉我们:

当我们的目标很远大,远到我们都看不到终点时,放弃几率就会很大,就像跑马拉松比赛,由于时间长、距离长,很多选手都会选择在中途放弃。

其实有个好办法,就是拆分,把大目标拆分成很多的小目标,这些小目标都是能够看到终点的,让自己有一种努力一下就能完成目标的感觉,当把所有的小目标完成后,大目标自然也就完成了。

言归正传,上一节我们聊了子组件修改父组件数据的几种方式,今天我们继续聊一些更高级的用法。

2. 多个 v-model 绑定 

2.1 回顾 v-model 方式,修改父组件数据的值

    const app = Vue.createApp({
data() {
return {
num : 1
}
},
template:`
<div>
<test v-model:num="num" />
</div>
`
});
app.component("test", {
props:['num'],
methods : {
incrNum() {
this.$emit('update:num', this.num + 1);
}
},
template:`
<div @click="incrNum" >{{num}}</div>
`
});

这是我们上一节的最后,使用 v-model 的方式修改父组件传递过来的 num 的例子。

这里父组件只传了一个参数给子组件,那如果父组件传递两个或多个参数给子组件呢,同学们应该已经知道怎么做了吧,我们看下面的例子

2.2 多个 v-model 绑定

    const app = Vue.createApp({
data() {
return {
num1 : 1,
num2 : 1
}
},
template:`
<div>
<test v-model:num1="num1" v-model:num2="num2"/>
</div>
`
}); app.component("test", {
props:['num1', 'num2'],
methods : {
incrNum1() {
this.$emit('update:num1', this.num1 + 1);
},
incrNum2() {
this.$emit('update:num2', this.num2 + 2)
}
},
template:`
<div @click="incrNum1" >{{num1}}</div>
<div @click="incrNum2" >{{num2}}</div>
`
});

这个例子很简单,父组件在使用 test 子组件时使用 <test v-model:num1="num1" v-model:num2="num2"/> 传递了两个参数 num1、num2 给子组件。

子组件在事件方法中,使用 this.$emit('update:num1', this.num1 + 1); 和 this.$emit('update:num2', this.num2 + 2); 修改 num1、num2 的值,num1每次点击加1,num2每次点击加2。

3. v-mode 修饰符

3.1 初识 v-model 修饰符

    const app = Vue.createApp({
data() {
return {
num : 1
}
},
template:`
<div>
<test v-model:num.double="num" />
</div>
`
}); app.component("test", {
props:{'num': Number, 'numModifiers': {
default: () => ({})
}},
methods : {
incrNum() { let newValue = this.num;
if(this.numModifiers.double) { newValue = newValue * 2;
} this.$emit('update:num', newValue);
}
},
template:`
<div @click="incrNum" >{{num}}</div>
`
});

主组件在使用 test 子组件时,使用 <test v-model:num.double="num" /> 代码传参,在这段代码中有一个新知识,就是 double 修饰符,这是我们自定义的一个修饰符,名称是随意取的。

子组件接收父组件参数时,不仅接收了 num,还接收了 numModifiers。

注意,这里 props 需要以对象的方式接收参数。

numModifiers 的命名规则是 参数+Modifiers,因为参数的命名是 num,所以这里是 numModifiers。

numModifiers 需要指定一个默认值 default: () => ({}) ,() => ({}) 意思是默认什么都不做,如果不指定默认值的话,当父组件传参时,没有指定修饰符,则会报错

最后在事件方法中使用 if(this.numModifiers.double) 判断是否使用了 double 修饰符,如果使用了,num 就乘 2。

这里只是举了一个简单的例子,可以根据指定的修饰符的不同,做很多不同的事情,例如:字母变大写,字母首字母大写,数字执行某个特殊计算等等。

3.2 多个参数包含修饰符

如果多个参数包含相同或不同的修饰符,该如何写呢,其实很简单,照猫画虎就可以

    const app = Vue.createApp({
data() {
return {
num : 1,
num2 : 1
}
},
template:`
<div>
<test v-model:num.double="num" v-model:num2.triple="num2" />
</div>
`
}); app.component("test", {
props:{
'num': Number,
'numModifiers': {
default: () => ({})
},
'num2': Number,
'num2Modifiers': {
default: () => ({})
},
},
methods : {
incrNum() { let newValue = this.num;
if(this.numModifiers.double) { newValue = newValue * 2;
} this.$emit('update:num', newValue);
},
incrNum2() { let newValue = this.num2;
if(this.num2Modifiers.triple) { newValue = newValue * 3;
} this.$emit('update:num2', newValue);
}
},
template:`
<div @click="incrNum" >{{num}}</div>
<div @click="incrNum2" >{{num2}}</div>
`
});

这里我们增加了一个 num2 参数,num2 参数使用了 triple(三倍) 修饰符,这也是个自定义的修饰符,名称是随意取的。

test 子组件用同样的方式接收 num2 和 num2Modifiers。

最后在事件方法中使用 if(this.num2Modifiers.triple) 判断是否使用了 triple 修饰符,如果使用了就把 num2 乘 3。

4. 综述

今天聊了一下 VUE3 的  多个 v-model 绑定及 v-model 修饰符的使用,希望可以对大家的工作有所帮助,下一节我们继续讲组件的相关知识,敬请期待

欢迎帮忙点赞、评论、转发、加关注 :)

关注追风人聊Java,每天更新Java干货。

5. 个人公众号

追风人聊Java,欢迎大家关注

 

VUE3 之 多个 v-model 绑定及 v-model 修饰符的使用 - 这个系列的教程通俗易懂,适合新手的更多相关文章

  1. vue_事件绑定 v-on _事件修饰符

    事件绑定 v-on 传参的同时,接收事件对象 <button @click="test('111', $evnt)">哈哈</button> 事件修饰符 阻 ...

  2. VUE3 之 插槽的使用 - 这个系列的教程通俗易懂,适合新手

    1. 概述 非理性定律告诉我们: 人们总是习惯于以情感去判断眼前的事物,非理性的去做决定. 对于长远的利益,人们更愿意去选择短期的利益. 因此在做决定前要让自己冷静,理性的分析,让自己看的更远. 言归 ...

  3. VUE3 之 动态组件 - 这个系列的教程通俗易懂,适合新手

    1. 概述 暗示效应告诉我们: 巧妙的暗示会在不知不觉中剥夺我们的判断力,对我们的思维形成一定的影响,造成我们行为的些许改变或者偏差. 例如你的朋友说你脸色不太好,是不是病了,此时,你可能就会感觉浑身 ...

  4. VUE3 之 动画与过渡的实现 - 这个系列的教程通俗易懂,适合新手

    1. 概述 光环效应告诉我们: 当一个人在某一方面取得了巨大的成功,人们就会给他贴上正面的标签,这个人从此就被"优秀"的光环所笼罩,他做的一切,人们都认为是正确的. 例如:越是名气 ...

  5. VUE3 之 使用标签实现动画与过渡效果 - 这个系列的教程通俗易懂,适合新手

    1. 概述 巴纳姆效应告诉我们: 人们更容易相信笼统的.常见的人格描述,并觉得特别适合自己,认为该描述真实地反映了自己的人格面貌. 这也是所有算命先生的小把戏,算命先生通常把话说的很笼统,很通用,基本 ...

  6. VUE3 之 作用域插槽 - 这个系列的教程通俗易懂,适合新手

    1. 概述 破窗效应告诉我们: 当一个建筑物窗户的玻璃完好无损时,很少有人想去破坏它,当有一个人破坏了一块窗户的玻璃,其他窗户的玻璃也很快会被人破坏. 同理,一个很干净的地方,人们不好意思去丢垃圾,但 ...

  7. VUE3 之 ref、provide、inject 的使用 - 这个系列的教程通俗易懂,适合新手

    1. 概述 首因效应告诉我们: 在日常交往中,第一印象是非常重要的,好的第一印象能让我们在与人相处时事半功倍. 但也从另一面告诉我们,不能仅凭第一印象去判断一个人,有时虚假的第一印象,也有可能蒙蔽我们 ...

  8. VUE3 之 使用标签实现动画与过渡效果(下) - 这个系列的教程通俗易懂,适合新手

    1. 概述 毛毛虫效应: 有这样一个实验,将许多毛毛虫放在一个花盆边缘,使它们首尾相接,围成一个圈.然后在离花盆很近的地方撒了一些毛毛虫的食物. 此时,毛毛虫并不会向食物的方向爬去,而是在花盆边缘,一 ...

  9. VUE3 之 多个元素之间的过渡 - 这个系列的教程通俗易懂,适合新手

    1. 概述 老话说的好:过去不等于未来,过去成功了不代表将来也会成功,过去失败了也不代表将来也会失败. 言归正传,今天我们聊聊多个元素之间的过渡. 2. 多个元素之间的过渡 2.1 两个元素交替显示 ...

随机推荐

  1. VS2015 up3激活key

    密钥 专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2 企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

  2. 再谈多线程模型之生产者消费者(多生产者和单一消费者 )(c++11实现)

    0.关于 为缩短篇幅,本系列记录如下: 再谈多线程模型之生产者消费者(基础概念)(c++11实现) 再谈多线程模型之生产者消费者(单一生产者和单一消费者)(c++11实现) 再谈多线程模型之生产者消费 ...

  3. Abelian Period

    Abelian Period Accepts: 288 Submissions: 984 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 26 ...

  4. Winform中使用HttpClient与后端api服务进行交互

    前端js可以使用ajax.axios发出http请求 在c#中winform.控制台等可以通过WebRequest.WebClient.HttpClient 有关三个类的性能对比大家可以自己搜一下,这 ...

  5. uniapp中scroll-view自定义滚动条

    注意事项 需在app.vue中添加如下,需要important /*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar { width: 16upx!imp ...

  6. Deepin20系统安装Nvidia驱动

    Deepin20系统安装Nvidia驱动 系统设备配置信息如下: 电脑型号:华硕天选air[ASUS-FX516P] 显卡型号:RTX 3070 移动版独显 处理器型号: 11th Gen Intel ...

  7. CS5265完美替代CH7211|Type-C转HDMI2.0单转方案|CH7211替代方案

    龙迅Chrontel的CH7211是一款Type-C转HDMI2.0半导体设备,可通过USB Type-C连接器将DisplayPort信号转换为HDMI/DVI.这款创新的基于USB Type-C的 ...

  8. Android开发案例 设置背景图片轮播

    点击按钮实现图片轮播效果 实践案例: xml <?xml version="1.0" encoding="utf-8"?> <LinearLa ...

  9. 抛砖系列之-MySQL中的数据类型JSON

    今天介绍一个MySQL中的数据类型-JSON,相信大家对JSON都不陌生,在日常工作中使用到的频率也很高,话不多说,直接开始. 何谓JSON 看下RFC文档对于JSON的描述 1.基于 JavaScr ...

  10. SSH公/私秘钥的生成及使用

    如果使用GitHub比较多的朋友,对SSH Key肯定也不陌生,当我们SSH进行代码的pull&push时,往往需要我们配置SSH Key. 如果Linux用的多朋友,肯定对SSH Key都很 ...