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 解析多维的Json数据格式
Nov 02 Javascript
js cookies实现简单统计访问次数
Nov 24 Javascript
jquery实现图片裁剪思路及实现
Aug 16 Javascript
cookie的secure属性详解
Apr 08 Javascript
js实现简单鼠标跟随效果的方法
Apr 10 Javascript
js代码验证手机号码和电话号码是否合法
Jul 30 Javascript
jQuery控制div实现随滚动条滚动效果
Jun 07 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
Dec 18 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
Jan 17 Javascript
详解如何使用webpack在vue项目中写jsx语法
Nov 08 Javascript
element-ui组件中input等的change事件中传递自定义参数
May 22 Javascript
Vue Element UI + OSS实现上传文件功能
Jul 31 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精确的统计在线人数的方法
2015/10/21 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
js网页版计算器的简单实现
2013/07/02 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
Python使用chardet判断字符编码
2015/05/09 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
python实现按长宽比缩放图片
2018/06/07 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
eBay加拿大站:eBay.ca
2019/06/20 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
锐步香港官方网上商店:Reebok香港
2020/11/05 全球购物
党的群众路线领导班子整改方案
2014/09/27 职场文书
个人先进材料范文
2014/12/30 职场文书
教师学期末个人总结
2015/02/13 职场文书
负责培养人意见
2015/06/05 职场文书
大学生社会实践感想
2015/08/11 职场文书
学校运动会开幕词
2016/03/03 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
golang goroutine顺序输出方式
2021/04/29 Golang
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python