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的几种方法
Oct 23 Javascript
神奇的代码 通杀各种网站-可随意修改复制页面内容
Jul 17 Javascript
jQuery学习笔记 更改jQuery对象
Sep 19 Javascript
javascript中打印当前的时间实现思路及代码
Dec 18 Javascript
常用jQuery选择器总结
Jul 11 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
Sep 21 Javascript
Position属性之relative用法
Dec 14 Javascript
JS中dom0级事件和dom2级事件的区别介绍
May 05 Javascript
jQuery树形控件zTree使用小结
Aug 02 Javascript
javascript中setAttribute兼容性用法分析
Dec 12 Javascript
JS实现select选中option触发事件操作示例
Jul 13 Javascript
Cocos2d实现刮刮卡效果
Dec 20 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
PHP实现添加购物车功能
2017/03/06 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
2011/10/18 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
VUE中V-IF条件判断改变元素的样式操作
2020/08/09 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
解析Python中的二进制位运算符
2015/05/13 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
毕业生求职的求职信
2013/12/05 职场文书
毕业生自荐书
2014/02/03 职场文书
法定授权委托证明书
2014/09/27 职场文书
在职证明书模板
2015/06/15 职场文书
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android