vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法


Posted in Javascript onNovember 27, 2017

上篇文章给大家介绍了浅析Vue自定义组件的v-model,大家可以参考下。接下来通过本文给大家介绍vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法,具体详情如下所示:

父子组件通信,都是单项的,很多时候需要双向通信。方法如下:

1、父组件使用:msg.sync="aa"  子组件使用$emit('update:msg', 'msg改变后的值xxx')

2、父组件传值直接传对象,子组件收到对象后可随意改变对象的属性,但不能改变对象本身。

3、父组件使用: v-model

第一种曾经被废除过,由于维护成本的原因被删掉,但经过证实,确实有存在的意义,又被加上。

  第一种:

父组件: 

<template>
 <div>
  <aa class="abc" :snycTest.sync="test" ></aa>
   {{'外面的值:' + test}}
  <button @click="fn">
   外面改变里面
  </button>  
 </div>
</template>
<script>
import aa from './test.vue'
 export default {
  data () {
   return {
    test: ''
   }
  },
  methods: {
   fn () {
    this.test += 1
   }
  },
  components:{
   aa
  }
 }
</script>

子组件:

<template>
 <div>
  <ul>
   <li>{{'里面的值:'+ snycTest}}</li>
   <button @click="fn2">里面改变外面</button>
  </ul>
 </div>
</template>
<script>
 export default {
  props: {
   snycTest: ''
  },
  methods: {
   fn2 () {
    this.$emit('update:snycTest', this.snycTest+1) //这儿是关键 update:snycTest 自定义事件会告诉父组件将父组件的 test值改为this.snycTest+1,并传回给子组件。
} } } </script>

v-model写法一:

父组件:

<template>
 <div>
  <aa class="abc" v-model="test" ></aa> // 组件中使用v-model
   {{'外面的值:' + test}} // 这儿试验test与内部msg值为双向绑定关系
  <button @click="fn">
   外面改变里面
  </button>
  
 </div>
</template>
<script>
import aa from './test.vue'
 export default {
  data () {
   return {
    test: ''
   }
  },
  methods: {
   fn () {
    this.test += 1 
   }
  },
  components:{
   aa
  }
 }
</script>

子组件写法一:

<template>
 <div>
  <ul>
   <li>{{'里面的值:'+ msg}}</li>
   <button @click="fn2">里面改变外面</button>
  </ul>
 </div>
</template>
<script>
 export default {
  model: {  // 使用model, 这儿2个属性,prop属性说,我要将msg作为该组件被使用时(此处为aa组件被父组件调用)v-model能取到的值,event说,我emit ‘cc' 的时候,参数的值就是父组件v-model收到的值。
   prop: 'msg',
   event: 'cc'
  },
  props: {
   msg: ''
  },
  methods: {
   fn2 () {
    this.$emit('cc', this.msg+2)
   }
  }
 }
</script>

v-model写法二

父组件 <aa class="abc" v-model='test' ></aa>

子组件

<template>
 <div>
  <ul>
   <li>{{'里面的值:'+ value}}</li> // 组件使用时有v-model属性,value初始传的‘what' 不会被渲染,而是v-model绑定的test值被渲染,这儿value会被重新赋值为v-model绑定的test的值。
   <button @click="fn2">里面改变外面</button>
  </ul>
 </div>
</template>
<script>
 export default {
  props: {
   value: { // 必须要使用value

 default: '',


},
  },
  methods: {
   fn2 () {
    this.$emit('input', this.value+2) // 这儿必须用input 发送数据,发送的数据会被父级v-model=“test”接受到,再被value=test传回来。
   }
  }
 }

一般双向绑定用v-model写法一。

总结

以上所述是小编给大家介绍的vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Jquery中ajax方法data参数的用法小结
Feb 12 Javascript
JS实现单行文字不间断向上滚动的方法
Jan 29 Javascript
jQuery版AJAX简易封装代码
Sep 14 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
Nov 16 Javascript
js使用原型对象(prototype)需要注意的地方
Aug 28 Javascript
动态加载权限管理模块中的Vue组件
Jan 16 Javascript
微信小程序之多文件下载的简单封装示例
Jan 29 Javascript
jQuery实现ajax回调函数带入参数的方法示例
Jun 26 jQuery
webpack+vue-cil中proxyTable处理跨域的方法
Jul 20 Javascript
layui获取多选框中的值方法
Aug 15 Javascript
详解Vue-axios 设置请求头问题
Dec 06 Javascript
JS实现京东商品分类侧边栏
Dec 11 Javascript
vue轮播图插件vue-awesome-swiper
Nov 27 #Javascript
在vue中实现简单页面逆传值的方法
Nov 27 #Javascript
浅析Vue自定义组件的v-model
Nov 26 #Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
Nov 26 #Javascript
Javacript中自定义的map.js  的方法
Nov 26 #Javascript
css和js实现弹出登录居中界面完整代码
Nov 26 #Javascript
js 判断一个数字是不是2的n次方幂的实例
Nov 26 #Javascript
You might like
PHP VS ASP
2006/10/09 PHP
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
2017/10/25 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
如何在项目中使用log4.js的方法步骤
2019/07/16 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
2020/07/21 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
python做接口测试的必要性
2019/11/20 Python
Python 读取位于包中的数据文件
2020/08/07 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
Visual-Click葡萄牙:欧洲领先的在线眼镜商
2020/02/17 全球购物
优秀毕业生推荐信
2013/11/02 职场文书
自我评价范文分享
2014/01/04 职场文书
给同学的道歉信
2014/01/16 职场文书
室内设计专业自荐信
2014/05/31 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis