vue中使用v-model完成组件间的通信


Posted in Javascript onAugust 22, 2019

以上的两种方法,都是实现的单向数组传递,那如何实现两个组件之间的双向传递呢?

即,在父组件中修改了值,子组件会立即更新。

在子组件中修改了值,父组件中立即更新。

vue中有一个很神奇的东西叫v-model,它可以完成我们的需求。

使用v-model过程中,父组件我们还是需要将子组件正常引入,只是传值方式改成了v-model

父组件

<template>
 <div>
 {{fatherText}}
 <Child v-model="fatherText"></Child>//调用子组件,并将 fatherText传递给子组件
 <button @click="changeChild">changeChildButton</button>
 </div>
</template>

<script>
import Child from "./Child.vue";
export default {
 name: "father",
 data() {
 return {
 fatherText: "i'm fathertext"
 };
 },
 components: {
 Child
 },
 methods: {
 changeChild() {
 this.fatherText = "father change the text";
 }
 }
};
</script>

子组件

<template>
 <div>
 <p class="child" @click="change">{{fatherText}}</p>//正常使用fatherText的值,并添加一个修改值 的方法
 </div>
</template>
<script>
export default {
 name: "child",
 model: {//添加了model方法,用于接收v-model传递的参数
 prop: "fatherText", //父组件中变量的传递
 event: "changeChild" //事件传递
 },
 props: {
 fatherText: {//正常使用props接收fatherText的值
 type: String
 }
 },
 data() {
 return {
 
 };
 },
 methods: {
 change(){
  this.fatherText = 'son change the text'
 }
 }
};
</script>

在这里,报了一个错误,这是因为数据流是单向的,但是我们在这里,子组件不应该直接修改props里的值。

vue中使用v-model完成组件间的通信 

这里不能直接修改,所以我们需要迂回着修改,在子组件中定义一个自己的变量,再将props的值赋值到自己的变量,修改自己的变量是可以的。

子组件 - 修改props中的值

<template>
 <div>
 <p class="child" @click="change">{{childText}}</p>
 </div>
</template>
<script>
export default {
 name: "child",
 model: {
 prop: "fatherText", //父组件中变量的传递
 event: "changeChild" //事件传递
 },
 props: {
 fatherText: {
 type: String
 }
 },
 data() {
 return {
 childText: this.fatherText //定义自己的变量childText
 };
 },
 methods: {
 change() {
 this.childText = "son change the test";//修改自己的变量
 }
 }
};

两个组件间更新

完成了上述代码,你会发现两个组件都改变的内容,但是只更新了自身组件的内容,如何使两个组件进行同步更新呢?

这里需要使用我的Wath方法,来进行监听传递组件的变量

<template>
 <div>
 <p class="child" @click="changeChild">{{childText}}</p>
 </div>
</template>
<script>
export default {
 name: "child",
 model: {
 prop: "fatherText", //父组件中变量的传递
 event: "changeChild" //事件传递
 },
 props: {
 fatherText: {
 type: String
 }
 },
 data() {
 return {
 childText: this.fatherText
 };
 },
 methods: {
 changeChild() {
 this.childText = "son change the test";
 }
 },
 watch: {
 fatherText(newtext) {//使用父组件中变量名为函数名,监听fatherText的变化,如果变化,则改变子组件中的值
 this.childText = newtext;
 },
 childText(newtext) {//监听子组件中childText变化,如果变化,则通知父组件,进行更新
 this.$emit("changeChild", newtext);
 }
 }
};

总结

以上所述是小编给大家介绍的vue中使用v-model完成组件间的通信希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
从JavaScript的函数重名看其初始化方式
Mar 08 Javascript
jQuery Ajax文件上传(php)
Jun 16 Javascript
网页中的图片的处理方法与代码
Nov 26 Javascript
Jquery弹出层插件ThickBox的使用方法
Dec 09 Javascript
jquery实现表单验证并阻止非法提交
Jul 09 Javascript
js实现网页收藏功能
Dec 17 Javascript
移动端横屏的JS代码(beta)
May 16 Javascript
AngularJS  $modal弹出框实例代码
Aug 24 Javascript
JS DOMReady事件的六种实现方法总结
Nov 23 Javascript
原生js实现放大镜
Feb 20 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
Feb 27 Javascript
vue2.0 根据状态值进行样式的改变展示方法
Mar 13 Javascript
layui动态表头的实现代码
Aug 22 #Javascript
深入理解令牌认证机制(token)
Aug 22 #Javascript
聊聊鉴权那些事(推荐)
Aug 22 #Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
Aug 22 #Javascript
vue使用高德地图根据坐标定位点的实现代码
Aug 22 #Javascript
ES6基础之字符串和函数的拓展详解
Aug 22 #Javascript
node实现爬虫的几种简易方式
Aug 22 #Javascript
You might like
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
php查询ip所在地的方法
2014/12/05 PHP
php实现微信公众号无限群发
2015/10/11 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
javascript 节点遍历函数
2010/03/28 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
python打开文件并获取文件相关属性的方法
2015/04/23 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
自荐信结尾
2013/10/27 职场文书
父亲追悼会答谢词
2014/01/17 职场文书
实习生自我评价
2014/01/18 职场文书
入党积极分子自我鉴定
2014/02/18 职场文书
清明节演讲稿
2014/05/27 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
实习计划书范文
2015/01/16 职场文书
2016七夕情人节感言
2015/12/09 职场文书