<!-- 父传子(props) 父组件father.vue -->
<template>
<div>
<div>father组件</div>
<div>父组件要传给子组件的参数:{{msg}}</div>
<!-- 1.传递:data1为动态参数msg的参数名,名字自定义,与子组件接收参数名同名
data2为静态参数的参数名,名字自定义,与子组件接收参数名同名 -->
<child :data1="msg" data2="传递的参数"></child>
</div>
</template>
<script>
import child from "./child";
export default {
data() {
return {
msg:"父组件的参数"
}
},
components: {
child
}
};
</script>
<!-- 子组件child.vue -->
<template>
<div>
<div>child组件</div>
<!-- 3.使用:这里就是接收的父组件参数 -->
<div>接受的父组件动态参数:{{ data1 }}</div>
<div>接受的父组件静态参数:{{ data2 }}</div>
<div>接受的父组件参数:{{ data }}</div>
</div>
</template>
<script>
export default {
// 2.接收:props接收父组件参数,data1与data2为传递参数的参数名,与父组件内同名
props: ["data1", "data2"],
data() {
return {
data: "默认值"
};
},
// 3.使用:直接用this调用
mounted() {
this.data = this.data1;
}
};
</script>
父组件所传递参数如果是需要在生命周期中获取赋值,就不能绑定在mounted中,否则子组件方法中this调用不会成功。生命周期顺序:父beforeMount->子beforeCreate……子mounted->父mounted
<!-- 子传父($emit) 子组件child.vue -->
<template>
<div>
<div>child组件</div>
<!-- 这里就是接收的父组件参数 -->
<input type="button" value="点击向父组件传参" @click="toFather">
</div>
</template>
<script>
export default {
data(){
return{
cmsg:'我是子组件的参数'
}
},
methods: {
toFather(){
// 1.子组件触发父组件方法
// $emit第一个参数为所要触发的父组件函数,函数名可自定义但要与父组件中对应函数名同名
// $emit第二个参数就是子组件向父组件传递的参数
this.$emit('receive',this.cmsg);
}
},
};
</script>
<!-- father.vue -->
<template>
<div>
<div>father组件</div>
<div>接收子组件参数:{{fmsg}}</div>
<!-- 2.在对应子组件上绑定函数,这里“receive”是函数名,可自定义但要与子组件触发函数同名 -->
<child @receive="fromChild"></child>
</div>
</template>
<script>
import child from "./child";
export default {
data() {
return {
fmsg:''
};
},
methods: {
// 接收子组件参数,赋值
fromChild(data){
this.fmsg=data;
}
},
components: {
child
}
};
</script>