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 相关文章推荐
刷新时清空文本框内容的js代码
Apr 23 Javascript
25个非常棒的jQuery滑块插件和教程小结
Sep 02 Javascript
JS实现QQ图片一闪一闪的效果小例子
Jul 31 Javascript
JS字符串截取函数实例
Dec 27 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
Nov 02 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
Jan 22 Javascript
js实现倒计时关键代码
May 05 Javascript
jQuery实现下拉菜单的实例代码
Jun 19 jQuery
javascript 作用于作用域链的详解
Sep 27 Javascript
vue头部导航动态点击处理方法
Nov 02 Javascript
three.js搭建室内场景教程
Dec 30 Javascript
vue2实现provide inject传递响应式
May 21 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
终于听上了直流胆调频
2021/03/02 无线电
PHP 表单提交给自己
2008/07/24 PHP
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
Python MySQLdb Linux下安装笔记
2015/05/09 Python
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
详解Python中的四种队列
2018/05/21 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
python中dict使用方法详解
2019/07/17 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
怎么写好自荐信
2013/10/30 职场文书
荷叶圆圆教学反思
2014/02/01 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
新店开张活动方案
2014/08/24 职场文书
信仰心得体会
2014/09/05 职场文书
小学班主任事迹材料
2014/12/17 职场文书
跳高加油稿
2015/07/21 职场文书
安全教育主题班会总结
2015/08/14 职场文书