Vue組件中的自定義事件你了解多少
主要介紹組件的自定義事件的概念,使用等。
何為組件自定義事件:
- 組件自定義事件是一種組件間的通信方式,方向是 子組件====>父組件。
- 使用場景:A是子組件,B是父組件,如果要把B的數據傳給A,可以使用props配置項,如果要把A的數據轉給B,就要用到組件自定義事件或者使用props加回調函數也可實現。
先使用props加回調函數實現子組件傳遞數據給父組件。
main.js:
//引入vue依賴 import Vue from 'vue' //引入組件App import App from './App.vue' // 關閉生產提示 Vue.config.productionTip = false //創(chuàng)建一個vue實例 new Vue({ //這個目前還沒學過,先知道他的作用是將app放入容器中。 render: h => h(App), //配置該vue實例管理id為app的容器 }).$mount('#app')
App.vue:
<template> <!-- 編寫結構 --> <div> <!-- 傳遞回調函數給子組件School --> <school :getSchoolNameFromSchoolVc="getSchoolNameFromSchoolVc"></school> <hr> <student></student> <div>App獲取School子組件的學校名:{{schoolNameFromSchool}}</div> </div> </template> <script> // 原本的引入 // import school from "./School.vue" // import student from "./Student.vue" //修改后的 //引入school組件和student組件,涉及es模塊化的語法 import school from "./components/School.vue" import student from "./components/Student.vue" export default { data() { return { schoolNameFromSchool:"" } }, components:{ //注冊組件 school, student }, methods:{ //定義一個回調函數并傳遞給子組件School getSchoolNameFromSchoolVc(schoolName){ console.log("App獲取School子組件的學校名:",schoolName); //賦值給schoolNameFromSchool this.schoolNameFromSchool = schoolName; } } } </script> <style> </style>
schoo.vue:
<template> <!-- 編寫組件結構代碼,也就是html代碼 --> <!-- 需要一個div括住,也就是只能有一個根元素,一般使用div --> <div class="orange"> <div>學校:{{schoolName}}</div> <div>地址:{{schoolAddress}}</div> <!-- //定義一個按鈕,點擊傳遞學校名稱給App組件。 --> <button @click="sendSchoolNameToApp">傳遞學校名給App組件</button> </div> </template> <script> //交互代碼編寫的地方,需要暴露出去給其他地方引入 //這個需要有一點es6模塊化的知識,這里一般使用默認暴露,因為這是單文件組件,只需要暴露一個組件對象, //并且引入默認暴露的組件引入語法比較簡單。 export default { data() { return { schoolName:"尚硅谷", schoolAddress:"北京" } }, //接收回調函數 props:["getSchoolNameFromSchoolVc"], methods:{ sendSchoolNameToApp(){ //調用回調函數,并把學校名傳遞進去 this.getSchoolNameFromSchoolVc(this.schoolName) } } } </script> <style scoped> /* 編寫樣式的地方 */ .orange{ background-color: orange; } </style>
student.vue:
<template> <!-- 編寫組件結構代碼,也就是html代碼 --> <!-- 需要一個div括住,也就是只能有一個根元素,一般使用div --> <div class="orange"> <div>學生姓名:{{studentName}}</div> <div>年齡:{{studentAge}}</div> </div> </template> <script> //交互代碼編寫的地方,需要暴露出去給其他地方引入 //這個需要有一點es6模塊化的知識,這里一般使用默認暴露,因為這是單文件組件,只需要暴露一個組件對象, //并且引入默認暴露的組件引入語法比較簡單。 export default { data() { return { studentName:"張三", studentAge:18 } }, } </script> <style> /* 編寫樣式的地方 */ .orange{ background-color: gray; } </style>
這種方式的流程:
1.在父組件(App)中定義一個回調方法并傳遞給子組件(School)。
該回調方法是把School組件傳遞過來的學校名渲染在App組件對應的區(qū)域。
2.子組件使用props配置項接收回調函數,并且編寫一個按鈕,點擊就調用該回調函數把數據傳遞到App組件中。
效果:
第二種方式是使用組件自定義事件實現:
使用組件自定義事件實現把子組件Student的學生名傳遞到App組件,并進行渲染。
分一下步驟:
3. 在父組件App中,設置自定義事件,并配置一個事件回調
4. 在子組件中,觸發(fā)自定義事件,把值傳過去。
效果:
除了在組件標簽中綁定自定義事件,也可以配合ref屬性在生命周期回調函數$mounted中進行綁定。
執(zhí)行效果一樣的。
自定義事件照樣可以使用事件修飾符once。
使用props或者組件自定義事件進行子組件像父組件傳遞數據的方式是比較像的。
props的方式是直接把回調函數傳遞給子組件調用。
而組件自定義事件是把回調函數通過事件的方式暴露出去,然后子組件通過觸發(fā)事件,達到調用回調函數的效果。
解綁組件自定義事件:
或者組件被銷毀時,這些自定義事件會被銷毀。
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!
相關文章
vue中Element-ui 輸入銀行賬號每四位加一個空格的實現代碼
我們在輸入銀行賬號會設置每四位添加一個空格,輸入金額,每三位添加一個空格。那么,在vue,element-ui 組件中,如何實現呢?下面小編給大家?guī)砹藇ue中Element-ui 輸入銀行賬號每四位加一個空格的實現代碼,感興趣的朋友一起看看吧2018-09-09Vue項目引入translate.js國際化自動翻譯組件的方法
這篇文章主要給大家介紹了關于Vue項目引入translate.js國際化自動翻譯組件的相關資料,除了基本的文本翻譯功能之外,jstranslate還提供了一些高級功能,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-01-01vue.nextTick()與setTimeout的區(qū)別及說明
這篇文章主要介紹了vue.nextTick()與setTimeout的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03