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 权威指南(第四版) 读书笔记
Aug 11 Javascript
JavaScript 学习笔记(十一)
Jan 19 Javascript
Ajax异步提交表单数据的说明及方法实例
Jun 22 Javascript
JS实现QQ图片一闪一闪的效果小例子
Jul 31 Javascript
jQuery javaScript捕获回车事件(示例代码)
Nov 07 Javascript
JS网页图片按比例自适应缩放实现方法
Jan 15 Javascript
JavaScript仿网易选项卡制作代码
Oct 06 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
Mar 03 Javascript
用JS实现简单的登录验证功能
Jul 28 Javascript
微信小程序开发animation心跳动画效果
Aug 16 Javascript
vue-cli3项目展示本地Markdown文件的方法
Jun 07 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
Jan 07 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
php printf输出格式使用说明
2010/12/05 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
JavaScript实现网页图片等比例缩放实现代码及调用方式
2013/02/25 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
Python笔记之观察者模式
2019/11/20 Python
销售自荐信
2013/10/22 职场文书
人力资源管理毕业生自荐信
2013/11/21 职场文书
大学社团活动策划书
2014/01/26 职场文书
淘宝活动策划方案
2014/02/06 职场文书
擅自离岗检讨书
2014/02/11 职场文书
优秀教师演讲稿
2014/05/06 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
抗洪救灾标语
2014/10/08 职场文书
奖励申请报告范文
2015/05/15 职场文书
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android
Nginx配置之禁止指定IP访问
2022/05/02 Servers