vue3中defineEmits的使用舉例詳解
vue3 defineEmits的使用
以下代碼和內(nèi)容的使用都是在vue3的setup中,未使用TS。
1、計數(shù)器案例
父組件:
<template> <h2>當(dāng)前計數(shù)為: {{counter}}</h2> <HelloWorld @add1="add1" @decre1="decre1"></HelloWorld> </template> <script setup> import { ref } from 'vue' import HelloWorld from './HelloWorld.vue' // 1、定義的屬性 const counter = ref(0) // 2、定義的方法 const add1 = (payload) => { counter.value = payload } const decre1 = (payload) => { counter.value = payload } </script>
子組件:
<template> <div> <button @click="increment">+1</button> <button @click="decrement">-1</button> <div> <input type="text" v-model.number="num"> </div> </div> </template> <script setup> import { ref, defineEmits } from 'vue' // 1、定義的屬性 const num = ref(0) // 2、定義發(fā)射給父組件的方法 const emits = defineEmits(['add1', 'decre1']) // 3、定義新增和遞減計數(shù)方法 const increment = () => { num.value++ emits('add1', num.value) } const decrement = () => { num.value-- emits('decre1', num.value) } </script>
頁面渲染效果
2、案例說明
1、在父組件中定義一個變量2、在子組件中定義+1和-1方法,以及一個變量3、通過子組件事件修改變量值,同時將值傳遞給父組件,對父組件的變量進(jìn)行賦值
3、defineEmits API 使用說明
1、在子組件中調(diào)用defineEmits并定義要發(fā)射給父組件的方法
const emits = defineEmits(['add1', 'decre1'])
2、使用defineEmits會返回一個方法,使用一個變量emits(變量名隨意)去接收
3、在子組件要觸發(fā)的方法中,調(diào)用emits并傳入發(fā)射給父組件的方法以及參數(shù)
emits('add1', num.value)
補充知識:Vue 2中
在Vue 2中,我們可以使用$emit方法來觸發(fā)自定義事件,并在父組件中通過v-on或@來監(jiān)聽這些事件。以下是使用Vue 2創(chuàng)建自定義事件的示例:
首先,在子組件中使用$emit觸發(fā)自定義事件:
Vue.component('my-component', { methods: { handleClick() { this.$emit('my-event', 'event payload'); } } });
然后,在父組件中使用v-on或@來監(jiān)聽自定義事件:
<my-component v-on:my-event="handleEvent"></my-component> <!-- 或者使用 @ --> <my-component @my-event="handleEvent"></my-component>
最后,在父組件的方法中處理自定義事件:
methods: { handleEvent(payload) { // 處理事件邏輯 console.log('Received event:', payload); } }
在這個示例中,子組件通過$emit方法觸發(fā)了一個名為my-event的自定義事件,并傳遞了一個payload作為參數(shù)。父組件通過v-on或@監(jiān)聽這個自定義事件,并在對應(yīng)的方法中處理事件邏輯。
需要注意的是,在Vue 2中,自定義事件的傳遞是單向的,只能從子組件向父組件傳遞數(shù)據(jù)。如果需要在父組件中向子組件傳遞數(shù)據(jù),可以使用props來實現(xiàn)。
使用場景:
- 父子組件通信:自定義事件是Vue 2中實現(xiàn)父子組件通信的一種方式。父組件可以監(jiān)聽子組件觸發(fā)的自定義事件,從而獲取子組件傳遞的數(shù)據(jù)或執(zhí)行相應(yīng)的邏輯。
- 組件解耦:通過使用自定義事件,可以將組件解耦,使得組件之間的通信更加靈活和可維護。組件可以通過觸發(fā)自定義事件來通知其他組件發(fā)生了某些特定的動作或狀態(tài)變化。
優(yōu)點:
- 靈活性:自定義事件提供了一種靈活的方式來實現(xiàn)組件之間的通信,可以根據(jù)具體的需求定義和觸發(fā)不同的事件。
- 組件解耦:通過使用自定義事件,可以將組件解耦,使得組件之間的通信更加靈活和可維護。
缺點:
- 單向傳遞:Vue 2中的自定義事件是單向傳遞的,只能從子組件向父組件傳遞數(shù)據(jù)。如果需要在父組件向子組件傳遞數(shù)據(jù),需要使用props來實現(xiàn)。
- 需要手動管理事件:在使用自定義事件時,需要手動定義和管理事件的名稱和參數(shù),相對于其他通信方式,需要更多的配置和代碼。
總體來說,Vue 2中的自定義事件適用于父子組件之間的通信和組件解耦的場景。它提供了一種靈活的方式來實現(xiàn)組件之間的通信,但需要手動管理事件,并且只能實現(xiàn)單向傳遞。在一些復(fù)雜的場景中,可能需要考慮使用Vuex或其他狀態(tài)管理庫來管理組件之間的共享狀態(tài)。
總結(jié)
到此這篇關(guān)于vue3中defineEmits使用的文章就介紹到這了,更多相關(guān)vue3 defineEmits使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mpvue 項目初始化及實現(xiàn)授權(quán)登錄的實現(xiàn)方法
這篇文章主要介紹了mpvue 項目初始化及實現(xiàn)授權(quán)登錄的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07教你如何使用VUE組件創(chuàng)建SpreadJS自定義單元格
這篇文章主要介紹了使用VUE組件創(chuàng)建SpreadJS自定義單元格的方法,通常我們使用組件的方式是,在實例化Vue對象之前,通過Vue.component方法來注冊全局的組件,文中通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-01-01vue+element創(chuàng)建動態(tài)的form表單及動態(tài)生成表格的行和列
這篇文章主要介紹了vue+element創(chuàng)建動態(tài)的form表單及動態(tài)生成表格的行和列 ,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05Vue.js@2.6.10更新內(nèi)置錯誤處機制Fundebug同步支持相應(yīng)錯誤監(jiān)控
這篇文章主要介紹了Vue.js@2.6.10更新內(nèi)置錯誤處機制,F(xiàn)undebug同步支持相應(yīng)錯誤監(jiān)控 ,需要的朋友可以參考下2019-05-05