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的获取mouse坐标插件的实现代码
Apr 01 Javascript
JS链式调用的实现方法
Mar 07 Javascript
jquery中的事件处理详细介绍
Jun 24 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
Jun 23 Javascript
AngularJS 整理一些优化的小技巧
Aug 18 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
Dec 29 Javascript
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
React Router V4使用指南(精讲)
Sep 17 Javascript
微信小程序开发之路由切换页面重定向问题
Sep 18 Javascript
浅析js中mvvm模式实现的原理
Oct 06 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
May 26 Javascript
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
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
关于手调机和数调机的选择
2021/03/02 无线电
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
JQuery的一些小应用收集
2010/03/27 Javascript
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
eval与window.eval的差别分析
2011/03/17 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
2017/01/21 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
JS二分查找算法详解
2017/11/01 Javascript
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
tensorflow之并行读入数据详解
2020/02/05 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
基于python实现复制文件并重命名
2020/09/16 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
个人自荐材料
2014/05/23 职场文书
2014年材料员工作总结
2014/11/19 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android