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 相关文章推荐
JS 巧妙获取剪贴板数据 Excel数据的粘贴
Jul 09 Javascript
js实现的标题栏新消息闪烁提示效果
Jun 06 Javascript
javascript+ajax实现产品页面加载信息
Jul 09 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
Jul 29 Javascript
JS实现IE状态栏文字缩放效果代码
Oct 24 Javascript
基于javascript实现简单计算器功能
Jan 03 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
Jun 12 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
Nov 04 Javascript
解决循环中setTimeout执行顺序的问题
Jun 20 Javascript
vue实现简单的星级评分组件源码
Nov 16 Javascript
微信小程序用户拒绝授权的处理方法详解
Sep 20 Javascript
vue基于better-scroll实现左右联动滑动页面
Jun 30 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
apache rewrite_module模块使用教程
2008/01/10 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
详解Vue.directive 自定义指令
2019/03/27 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
2020/03/03 Javascript
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
python操作MySQL数据库的方法分享
2012/05/29 Python
讲解python参数和作用域的使用
2013/11/01 Python
解决Mac安装scrapy失败的问题
2018/06/13 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
教师实习自我鉴定
2013/12/13 职场文书
交通事故检查书范文
2014/01/30 职场文书
学校节能减排方案
2014/06/13 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
大学专科求职信
2014/07/02 职场文书
大学生就业意向书
2015/05/11 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL