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 相关文章推荐
经典的解除许多网站无法复制文字的绝招
Dec 31 Javascript
用JSON做数据传输格式中的一些问题总结
Dec 21 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
Jan 28 Javascript
基于javascript简单实现对身份证校验
Jan 25 Javascript
js实现放大镜特效
May 18 Javascript
vue中七牛插件使用的实例代码
Jul 28 Javascript
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
jQuery实现简单的计时器功能实例分析
Aug 29 jQuery
IntersectionObserver实现图片懒加载的示例
Sep 29 Javascript
微信小程序如何获取群聊的openGid以及名称详解
Jul 17 Javascript
JavaScript中的全局属性与方法深入解析
Jun 14 Javascript
vue引入Excel表格插件的方法
Apr 28 Vue.js
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
关于PHP开发的9条建议
2015/07/27 PHP
php常用图片处理类
2016/03/16 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
CSS心形加载的动画源码的实现
2021/03/09 HTML / CSS
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
javascript 实现map集合
2015/04/03 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
酒店经理职责
2014/01/30 职场文书
百日安全活动总结
2014/05/04 职场文书
文秘专业应届生求职信
2014/05/26 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
课外活动实习计划
2015/01/19 职场文书
出国留学单位推荐信
2015/03/26 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
Vue.Draggable实现交换位置
2022/04/07 Vue.js
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers
SQL Server使用PIVOT与unPIVOT实现行列转换
2022/05/25 SQL Server