视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2020-11-27 22:25:02 责编:小采
文档

上篇文章给大家介绍了浅析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双向绑定、 父子组件同步通信的多种写法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

下载本文
显示全文
专题