Vue子組件向父組件通信與父組件調(diào)用子組件中的方法
子組件向父組件通信
子組件的button按鈕綁定點(diǎn)擊事件,事件方法名為sendToParent(),
該方法在子組件的methods中聲明,實(shí)現(xiàn)功能this.$emit('cus-event',this.msg);
在父組件引入子組件,并給cus-event事件綁定doAction($event)方法,該方法中this.msg = e;console.log(e),
而msg已經(jīng)在data中聲明,其值為”子級(jí)消息”,故最終的輸出結(jié)果為: 展示父級(jí)接收到的消息:子級(jí)消息
父組件調(diào)用子組件中的方法
點(diǎn)擊父組件的button按鈕,觸發(fā)了click事件指向的useChild方法[該方法的行為是輸出”父級(jí)消息”],
useChild方法在父組件的中的methods中聲明,調(diào)用子組件中的方法,并傳入?yún)?shù)str,即this.$refs.child1.getMsg(str);
而getMsg方法已經(jīng)在子組件的methods中聲明,其行為是console.log('子級(jí)組件收到父級(jí)的內(nèi)容',str);,
所以,最終的輸出結(jié)果為: 子級(jí)組件收到父級(jí)的內(nèi)容 父級(jí)消息
代碼示例(結(jié)合上面的分析理解代碼)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>子向父通信</title>
<style>
#app {
border: 1px solid blue;
width: 500px;
padding: 20px;
margin: auto;
border-radius: 8px;
background: fuchsia;
}
#wrapper {
border: 1px solid red;
width: 400px;
padding: 20px;
border-radius: 8px;
background: yellowgreen;
margin-top: 20px;
}
</style>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<!-- 父組件 -->
<h1>這是父組件</h1>
<p>展示父級(jí)接收到的消息:{{msg}}</p>
<button @click="useChild(szStr)">調(diào)用子組件的方法</button>
<!-- cus-event為子組件自定義的事件名; doAction($event)為父組件的事件,參數(shù)$event不可少也不可寫(xiě)成其他-->
<!-- ref表示組件的別名 -->
<child @cus-event="doAction($event)" ref="child1"></child>
</div>
</body>
</html>
<template id="child">
<div id="wrapper">
<!-- 子組件 -->
<h2>這是子組件</h2>
<button @click="sendToParent">向父組件發(fā)消息</button>
</div>
</template>
<script>
let child = {
template: '#child',
data() {
return {
msg: '子級(jí)消息'
};
},
methods: {
sendToParent() {
// 子組件只管發(fā)送消息,其中cus-event為自定義事件名(事件名不能寫(xiě)成駝峰法,多個(gè)單詞用-連接),this.msg為要傳遞的參數(shù)。
this.$emit('cus-event', this.msg);
},
getMsg(str) {
console.log('子級(jí)組件收到父級(jí)的內(nèi)容', str);
}
}
};
// 注意: .$mount('#app')跟實(shí)例內(nèi)部el: '#app'是等價(jià)的
new Vue({
data: {
msg: '',
szStr:'父級(jí)消息'
},
components: {
child
},
methods: {
doAction(e) {
console.log(this);
console.log(e);
this.msg = e;
},
useChild(str) {
// 調(diào)用子組件的方法
// console.log(this);
// console.log(this.$refs);
// this.$refs.child1得到的子組件實(shí)例
this.$refs.child1.getMsg(str);
}
}
}).$mount('#app');
</script>
效果圖

總結(jié)
以上所述是小編給大家介紹的Vue子組件向父組件通信與父組件調(diào)用子組件中的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Vue子組件調(diào)用父組件方法案例詳解
- Vue父組件調(diào)用子組件函數(shù)實(shí)現(xiàn)
- vue 父組件中調(diào)用子組件函數(shù)的方法
- vue 父組件調(diào)用子組件方法及事件
- Vue父組件調(diào)用子組件事件方法
- VUEJS 2.0 子組件訪問(wèn)/調(diào)用父組件的實(shí)例
- vue 使用ref 讓父組件調(diào)用子組件的方法
- Vuejs 2.0 子組件訪問(wèn)/調(diào)用父組件的方法(示例代碼)
- vue.js中父組件調(diào)用子組件的內(nèi)部方法示例
- 關(guān)于vue父組件調(diào)用子組件的方法
相關(guān)文章
Vue?3?表格時(shí)間監(jiān)控與動(dòng)態(tài)后端請(qǐng)求觸發(fā)詳解?附Demo展示
在Vue3中,使用el-table組件渲染表格數(shù)據(jù),通過(guò)el-table-column指定內(nèi)容,時(shí)間點(diǎn)需前端校準(zhǔn),用getTime()比較,到達(dá)時(shí)觸發(fā)操作,異步API請(qǐng)求可用async/await處理,setInterval實(shí)現(xiàn)定時(shí)監(jiān)控,配合條件判斷防止重復(fù)請(qǐng)求2024-09-09
vue點(diǎn)擊單張圖片放大實(shí)現(xiàn)步驟(純js)
這篇文章主要給大家介紹了關(guān)于vue點(diǎn)擊單張圖片放大實(shí)現(xiàn)的相關(guān)資料,在vue項(xiàng)目中實(shí)現(xiàn)點(diǎn)擊圖片放大功能相信對(duì)大家來(lái)說(shuō)都不陌生,文中給出了詳細(xì)的js示例代碼,需要的朋友可以參考下2023-07-07
基于vue2.0+vuex+localStorage開(kāi)發(fā)的本地記事本示例
這篇文章主要介紹了基于vue2.0+vuex+localStorage開(kāi)發(fā)的本地記事本示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
vue實(shí)現(xiàn)評(píng)價(jià)星星功能
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)評(píng)價(jià)星星功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
Vue不能watch數(shù)組和對(duì)象變化解決方案
這篇文章主要為大家介紹了Vue不能watch數(shù)組和對(duì)象變化解決方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
vue一個(gè)頁(yè)面實(shí)現(xiàn)音樂(lè)播放器的示例
這篇文章主要介紹了vue一個(gè)頁(yè)面實(shí)現(xiàn)音樂(lè)播放器的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02

