淺析Vue.js中$emit和$on的用法和區(qū)別
Vue.js 中的 $emit 和 $on 方法有什么區(qū)別?
$emit
$emit 方法是 Vue.js 中用于觸發(fā)自定義事件的方法。它可以讓我們在一個組件中觸發(fā)一個自定義事件,并向父組件或祖先組件派發(fā)這個事件。在觸發(fā)事件時,我們可以傳遞任意數(shù)量的參數(shù),這些參數(shù)可以在監(jiān)聽事件的組件中獲取到。
下面是一個使用 $emit 方法的示例代碼:
// 定義一個名為 myButton 的組件 Vue.component('my-button', { template: ` <button @click="onClick">Click me</button> `, methods: { onClick: function () { this.$emit('clicked', 'Hello, world!') } } }) // 定義一個名為 myApp 的組件,并在其中監(jiān)聽 myButton 組件的 clicked 事件 Vue.component('my-app', { template: ` <div> <my-button @clicked="onButtonClicked"></my-button> <p>{{ message }}</p> </div> `, data: function () { return { message: '' } }, methods: { onButtonClicked: function (msg) { this.message = msg } } })
在上面的代碼中,我們定義了一個名為 myButton 的組件。這個組件中有一個按鈕,當用戶點擊按鈕時,會觸發(fā)一個名為 clicked 的自定義事件,并將字符串 ‘Hello, world!’ 作為參數(shù)傳遞給事件處理函數(shù)。
然后,我們定義了一個名為 myApp 的組件,并在其中監(jiān)聽 myButton 組件的 clicked 事件。當 myButton 組件觸發(fā) clicked 事件時,myApp 組件中的 onButtonClicked 方法就會被調(diào)用,并將傳遞給事件處理函數(shù)的參數(shù)賦值給組件中的 message 數(shù)據(jù),從而更新視圖。
需要注意的是,$emit 方法只能向父組件或祖先組件派發(fā)事件,不能向子組件或后代組件派發(fā)事件。這是因為 Vue.js 中的事件傳遞是基于 DOM 樹的,父組件可以通過 props 將數(shù)據(jù)傳遞給子組件,但是子組件不能直接向父組件傳遞數(shù)據(jù)。
$on
$on 方法是 Vue.js 中用于監(jiān)聽自定義事件的方法。它可以讓我們在一個組件中監(jiān)聽一個自定義事件,并在事件觸發(fā)時執(zhí)行一個回調(diào)函數(shù)。在監(jiān)聽事件時,我們可以指定一個可選的參數(shù),用于限制事件的作用域,使得事件只在指定的組件中有效。
下面是一個使用 $on 方法的示例代碼:
// 定義一個名為 myButton 的組件,并在其中觸發(fā)一個 clicked 事件 Vue.component('my-button', { template: ` <button @click="onClick">Click me</button> `, methods: { onClick: function () { this.$emit('clicked', 'Hello, world!') } }, created: function () { this.$emit('clicked', 'Hello, world!') } }) // 定義一個名為 myApp 的組件,并在其中監(jiān)聽 myButton 組件的 clicked 事件 Vue.component('my-app', { template: ` <div> <my-button></my-button> <p>{{ message }}</p> </div> `, data: function () { return { message: '' } }, created: function () { this.$on('clicked', this.onButtonClicked) }, methods: { onButtonClicked: function (msg) { this.message = msg } } })
在上面的代碼中,我們定義了一個名為 myButton 的組件,并在其中觸發(fā)一個 clicked 事件。在 myApp 組件中,我們使用 $on 方法監(jiān)聽 myButton 組件的 clicked 事件,并指定該事件只在 myApp 組件中有效。當 myButton 組件觸發(fā) clicked 事件時,myApp 組件的 onButtonClicked 方法就會被調(diào)用,并將傳遞給事件處理函數(shù)的參數(shù)賦值給組件中的 message 數(shù)據(jù),從而更新視圖。
需要注意的是,$on 方法只能監(jiān)聽已經(jīng)派發(fā)的事件,不能監(jiān)聽尚未派發(fā)的事件。因此,在上面的代碼中,我們在 myButton 組件的 created 鉤子函數(shù)中手動觸發(fā)了 clicked 事件,以便 myApp 組件可以監(jiān)聽到該事件。
區(qū)別
$emit和on方法的區(qū)別主要在于它們的作用和用法。 on方法的區(qū)別主要在于它們的作用和用法。on方法的區(qū)別主要在于它們的作用和用法。emit方法用于觸發(fā)自定義事件并向父組件或祖先組件派發(fā)該事件,而 on方法用于監(jiān)聽自定義事件并在事件觸發(fā)時執(zhí)行回調(diào)函數(shù)。 on方法用于監(jiān)聽自定義事件并在事件觸發(fā)時執(zhí)行回調(diào)函數(shù)。on方法用于監(jiān)聽自定義事件并在事件觸發(fā)時執(zhí)行回調(diào)函數(shù)。emit方法必須在組件內(nèi)部使用,而$on方法可以在任何地方使用,包括組件內(nèi)部和組件外部。
另外,$emit方法可以傳遞任意數(shù)量的參數(shù),而on方法只能傳遞一個參數(shù),這個參數(shù)就是事件處理函數(shù)在接收到事件時傳遞的數(shù)據(jù)。 on方法只能傳遞一個參數(shù),這個參數(shù)就是事件處理函數(shù)在接收到事件時傳遞的數(shù)據(jù)。on方法只能傳遞一個參數(shù),這個參數(shù)就是事件處理函數(shù)在接收到事件時傳遞的數(shù)據(jù)。emit方法只能向父組件或祖先組件派發(fā)事件,而$on方法可以監(jiān)聽任意組件派發(fā)的事件。
總結(jié)
$emit 和on方法是Vue . js中用于實現(xiàn)組件間通信的兩個重要方法。 on方法是Vue.js中用于實現(xiàn)組件間通信的兩個重要方法。on方法是Vue.js中用于實現(xiàn)組件間通信的兩個重要方法。emit方法用于觸發(fā)自定義事件并向父組件或祖先組件派發(fā)該事件,而on方法用于監(jiān)聽自定義事件并在事件觸發(fā)時執(zhí)行回調(diào)函數(shù)。on方法用于監(jiān)聽自定義事件并在事件觸發(fā)時執(zhí)行回調(diào)函數(shù)。on方法用于監(jiān)聽自定義事件并在事件觸發(fā)時執(zhí)行回調(diào)函數(shù)。emit方法必須在組件內(nèi)部使用,而on方法可以在任何地方使用,包括組件內(nèi)部和組件外部。 on方法可以在任何地方使用,包括組件內(nèi)部和組件外部。on方法可以在任何地方使用,包括組件內(nèi)部和組件外部。emit方法可以傳遞任意數(shù)量的參數(shù),而on方法只能傳遞一個參數(shù)。on方法只能傳遞一個參數(shù)。on方法只能傳遞一個參數(shù)。emit方法只能向父組件或祖先組件派發(fā)事件,而 $on 方法可以監(jiān)聽任意組件派發(fā)的事件。
在實際開發(fā)中,$emit和$on方法經(jīng)常被用來實現(xiàn)父子組件之間的數(shù)據(jù)傳遞和交互。通過熟練掌握這兩個方法的用法,我們可以更加靈活地組織組件間的關(guān)系,提高組件的復用性和可維護性。
以上就是淺析Vue.js中$emit和$on的用法和區(qū)別的詳細內(nèi)容,更多關(guān)于Vue.js中$emit和$on的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
elementUI Pagination 分頁指定最大頁的問題及解決方法(page-count)
項目中遇到數(shù)據(jù)量大,查詢的字段多,但用戶主要使用的是最近的一些數(shù)據(jù),1萬條以后的數(shù)據(jù)一般不使用,這篇文章主要介紹了elementUI Pagination 分頁指定最大頁的問題及解決方法(page-count),需要的朋友可以參考下2024-08-08vue中對象的賦值Object.assign({}, row)方式
這篇文章主要介紹了vue中對象的賦值Object.assign({}, row)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03vue項目中將element-ui table表格寫成組件的實現(xiàn)代碼
這篇文章主要介紹了vue項目中將element-ui table表格寫成組件的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-06-06Vue-Router2.X多種路由實現(xiàn)方式總結(jié)
下面小編就為大家分享一篇Vue-Router2.X多種路由實現(xiàn)方式總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02