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函数的重载
Sep 22 Javascript
共享自己写一个框架DreamScript
Jan 20 Javascript
Js 订制自己的AlertBox(信息提示框)
Jan 09 Javascript
jQuery 性能优化指南 (1)
May 21 Javascript
Js实现动态添加删除Table行示例
Apr 14 Javascript
理解javascript中DOM事件
Dec 25 Javascript
jQuery快速实现商品数量加减的方法
Feb 06 Javascript
jQuery extend()详解及简单实例
May 06 jQuery
Angular如何引入第三方库的方法详解
Jul 13 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
Feb 07 Javascript
ssm+vue前后端分离框架整合实现(附源码)
Jul 08 Javascript
node中短信api实现验证码登录的示例代码
Jan 20 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编写的抽奖程序中奖概率算法
2015/05/14 PHP
Javascript Math对象
2009/08/13 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
2016/08/16 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
python障碍式期权定价公式
2019/07/19 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
美国批发零售网站:GearXS
2016/07/26 全球购物
毕业自我鉴定怎么写
2014/03/25 职场文书
档案保密承诺书
2014/06/03 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
小学数学教学反思范文
2016/02/16 职场文书
小程序实现侧滑删除功能
2022/06/25 Javascript