子组件向父组件通信
案例截图:

说明:有一个列表是通过循环出来的,子组件每次点击添加时数量可以添加。并且父组件可以计算结果
子组件代码:
<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] //这样可以指定默认的值,当然不写也是可以的
}
}