组件之间的通信

Posted chengxiang123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组件之间的通信相关的知识,希望对你有一定的参考价值。

子组件向父组件通信
案例截图:
  技术分享图片
说明:有一个列表是通过循环出来的,子组件每次点击添加时数量可以添加。并且父组件可以计算结果
子组件代码:
  
<template>
    <div class="pox">
        <button @click="decreaseCart()">减少</button>
        <span>数量:</span>
        <button @click="add()">添加</button>
    </div>
</template>
import Vue from ‘vue‘;

export default {
    props:{
  //time 是父组件循环的每一个东西,分别传输给子组件
        time:{
            type:Object
        }
    },
    methods:{
        add(){
            if(!this.time.count){
                //Vue.set(选择对象,改变谁,改变成什么),这个地方我们添加一个自定义的属性count  用来增加数量,使用Vue.set()方法是为了让DOM更新
                Vue.set(this.time,"count",1)
            }else{
                this.time.count++
            }
            console.log(this.time.count)
            //给父组件传递信息,自定义函数。 add 是传输名,this.time是把谁传过去
            this.$emit(‘add‘, this.time);
        },
        decreaseCart(){
            if(this.time.count){
                this.time.count--
            }
            console.log(this.time.count)
            this.$emit(‘add‘, this.time);
        }
    },
}

 

父组件:
<ul>
    <li v-for="(time,index) in arr" :key="index">
        <div>序列号{{time.id}}</div>
              <div>数量</div>
              <div class="zj">
              <!--父组件接收-->
              <zj1 @add="addFood" :time="time"></zj1>
              {{time.count}}
        </div>
    </li>
</ul>    
computed:{
//循环,添加到数组
        jg(){
            let re = []
            this.arr.forEach((time) => {
                // console.log(time.count,time.id)
                if(time.count){
                    re.push(time.count * time.id)
                }
            });
            return re
        },
    },
    methods:{
       //计算结果
        addFood(target){
             console.log(this.jg)
             let sum = 0;
             for(let i=0; i<this.jg.length;i++){
                 sum+=this.jg[i]
             }
             this.sum = sum
        },
    },

 

父组件向子组件通信:
  
父组件:
<parent>
    <child :child-msg="msg"></child>//这里必须要用 - 代替驼峰
</parent>

data(){
    return {
        msg: [1,2,3]
    };
}

子组件:
props: {
    childMsg: {
        type: Array,
        default: [0,0,0] //这样可以指定默认的值,当然不写也是可以的
    }
}

  

以上是关于组件之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

如何在嵌套片段内的两个子片段之间进行通信

片段和服务器之间的通信问题

与另一个片段通信的片段接口

在片段和活动之间进行通信 - 最佳实践

Android开发——UI_片段

vue组件之间的通信, 父子组件通信,兄弟组件通信