一、子组件使用defineProps和defineEmits
用defineProps来定义props来接收父组件传给子组件的值;
用defineEmits来定义emits来把子组件的数据传给父组件。
1、在子组件中进行如下定义
const props = defineProps({
id: {
type: String,
default: "0",
},
rowId: {
type: String,
default: "0",
}
});
const emits = defineEmits(['testEmitSendDataEvent']);
let test = () => {
emits("testEmitSendDataEvent", '参数送过来了,父组件,查收一下');//第一个是在父组件中定义的方法,第二个是传递参数
};
二、在父组件中对子组件进行引入和使用
<div>
<PaymentRequestPage :id="paymentRequestId" :rowId="paymentRequestRowId" @testEmitSendDataEvent="testEmitSendDataEventGetData"></PaymentRequestPage>
</div>
<div>
<PenaltyRequestPage :id="penaltyRequestId" :rowId="penaltyRequestRowId" @testEmitSendDataEvent="testEmitSendDataEventGetData" ></PenaltyRequestPage>
</div>
父组件使用的 :id, :rowId 这2个props都是在子组件中定义好的rops。
父组件使用的 @testEmitSendDataEvent 这个也是子组件定义好Emits。
父组件还需要一个获取对应Emits传值回来的接收方法。本例子中使用的是:testEmitSendDataEventGetData 这个方法。
下面就是父组件中这个方法定义的内容。
let testEmitSendDataEventGetData = (obj) => {
console.log("testEmitSendDataEventGetData:" + JSON.stringify(obj));
}
三、子组件如何处理父组件通过props传来的值
1、比如可以在onMounted中使用获取的值进行各种数据请求和处理。
onMounted(() => {
console.log("props:"+JSON.stringify(props)) //输出父组件通过传过来的参数
if ("0" != props.id) {
getPaymentRequestById({id: props.id}).then((res)=>{
paymentRequestForm.id=res?.data?.id||'';
paymentRequestForm.requestDate=res.data.requestDate;
paymentRequestForm.payee=res.data.payee;
paymentRequestForm.payeeAddress=res.data.payeeAddress;
paymentRequestForm.bankName=res.data.bankName;
paymentRequestForm.account=res.data.account;
paymentRequestForm.paymentAmount=res.data.paymentAmount;
paymentRequestForm.paymentPurpose=res.data.paymentPurpose;
});
} else {
}
});
四、子组件通过方法来调用Emits来把需要的值传给父组件
1、比如可以定义一个按钮来触发js函数方法,在方法里使用emits来把值传递给父组件。
<el-divider></el-divider>
<div style="display:flex;justify-content: flex-end;">
<el-button type="primary" @click="test">测试</el-button><el-button type="primary" @click="handleSavePaymentRequest">保存</el-button><el-button type="primary" v-print="'#printPaymentRequestForm'">打印</el-button>
</div>
<el-divider></el-divider>
<div id="printPaymentRequestForm" style="border:1px solid white;">
<PaymentRequestFormPrint />
</div>
这个案例中使用定义的test方法。由按钮触发test函数,在这个test函数内使用emits来向父组件进行传值。第一个参数是父组件里绑定的Emits的ID标识,第二个参数是要传给父组件的值。
const emits = defineEmits(['testEmitSendDataEvent']);
let test = () => {
emits("testEmitSendDataEvent", '参数送过来了,父组件,查收一下');//第一个是在父组件中定义的方法,第二个是传递参数
};
五、使用效果
使用方法如下哦,在子组件上点击测试按钮。在父组件的Emits对应ID标识的接收方法就会获取到子组件传过来的值。