精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Vue3 $emit指南--包含選項API、組合API以及 setup 語法糖

開發 前端
在 vue3 中,與組件和 prop 一樣,事件名提供了自動的大小寫轉換。如果在子組件中觸發一個以 camelCase (駝峰式命名) 命名的事件,你將可以在父組件中添加一個 kebab-case (短橫線分隔命名) 的監聽器。

許多Vue模式涉及使用props將數據從父組件傳遞到子組件。但如果我們需要一個子組件將數據傳給它的父組件呢?

使用 emit,我們可以觸發事件并將數據傳遞到組件的層次結構中。這對下面幾種情況很有用,如:

  • 從 input 中發出數據
  • 從 modal 本身內部關閉 modal
  • 父組件響應子組件

Vue Emit是如何工作的?

當我們 emit 一個事件時,我們用一個或多個參數調用一個方法:

  • eventName: string - 事件的名稱
  • values: any - 通過事件傳遞的參數

下面是一個內聯 emit的例子,<button @click="$emit('add', Math.random())">?。emit一個名為add?的事件,并將Math.random()的值作為參數傳遞出去。

然后,在父組件使用v-on或@指令可以監聽我們的自定義添加事件并接收該參數值。

Child.vue

<template>
<button @click="$emit('add', Math.random())">
Add Math.random()
</button>
</template>

在** Parent.vue **中監聽:

<script setup>
import { ref } from 'vue'
const count = ref(0)
// 也可以從我們的模板中調用一個函數 `<ChildComponent @add="add" />
// const add = (i) => count.value += i
</script>
<template>
<ChildComponent @add="(i) => count += i" />
<p>Count: {{ count }}</p>
</template>

圖片

每次我們點擊按鈕,Child.vue? 都會 emit 一個 add? 事件,并帶有一個0到1之間的隨機值。然后,Parent.vue 捕捉到這個事件,并將這個值添加到計數中。

可以傳遞任意多的參數,監聽器也會收到所有的參數:

  • Child - $emit('add', Math.random(), 44, 50)
  • Parent -@add="(i, j, k) => count += i + j + k"

現在,我們知道如何在我們的模板中 emit 內聯事件,但在更復雜的例子中,如果我們從SFC的script 中 emit 一個事件會更好。特別是當我們想在 emit 事件之前執行一些邏輯時,這很有用。

在Vue 3中,我們有2種不同的方法來做到這一點:

  • 選項API - this.$emit
  • 帶有setup()?的組合API - context.emit
  • 帶有<script setup>?的組合API -defineEmits()

我們一個一個來看。

選項API - this.$emit

在 Vue3 中,我人可以選擇使用選項API或組合API。

在選項API中,我們可以調用this.$emit來 emit一個自定義事件。

看下面這個例子在 MyTextInput.vue? 中,它包含一個 label? 和 input?。每當 input 改變時,我們會 emit 一個事件,并將輸入的值轉成大寫作為參數傳遞出去。

我們可以不從模板中調用$emit?,而是調用一個組件方法。在該方法中調用this.$emit并把我們的值傳給它。

MyTextInput.vue

<script>
export default {
methods: {
handleChange (event) {
this.$emit("customChange", event.target.value.toUpperCase())
}
}
}
</script>

<template>
<div>
<label>My Custom Input</label>
<input type="text" placeholder="Custom input!" @input="handleChange" />
</div>
</template>

在 Parent.vue 中接收:

<script>
export default {
methods: {
handleChange (event) {
this.$emit("customChange", event.target.value.toUpperCase())
}
}
}
</script>

<template>
<div>
<label>My Custom Input</label>
<input type="text" placeholder="Custom input!" @input="handleChange" />
</div>
</template>

帶有setup()?的組合API - context.emit

在 組合API中,如果使用setup?函數,就不能在用 this?,也就是不能調用this.$emit()方法了。

相反,可以使用 setup 方法中的第二個參數 context? 來訪問 emit?  方法。我們可以用之前使用的事件名稱和值調用context.emit。

MyTextInput.vue

<script>
export default {
// can use the entire context object
setup (props, context) {
const handleChange = (event) => {
context.emit("customChange", event.target.value)
}
return {
handleChange
}
},
// or we can destructure it and get `emit`
setup (props, { emit }) {
const handleChange = (event) => {
emit("customChange", event.target.value)
}
return {
handleChange
}
}
}
</script>

<template>
<div>
<label>My Custom Input</label>
<input type="text" placeholder="Custom input!" @input="handleChange" />
</div>
</template>

圖片

在 <script setup> 中的用法

當我們使用<script setup>?時,我們無法訪問組件實例或 context? 上下文參數。那我們怎么獲得 emit ?

在這種情況下,我們可以使用 defineEmits:

  • 指定組件要 emit 事件
  • 為每個事件添加驗證信息
  • 可以訪問與context.emit相同的值

在最簡單的情況下,defineEmits是一個字符串數組,每個字符串是一個事件的名稱。

MyTextInput.vue

<script setup>
const emit = defineEmits(['customChange'])

const handleChange = (event) => {
emit('customChange', event.target.value.toUpperCase())
}
</script>

圖片

然而,如果我們傳遞一個對象,我們可以為每個事件添加一個驗證器函數,我們可以在里面檢查值是否是我們所需要的格式。

像事件監聽器一樣,驗證器接受我們傳入所有參數。

這與prop  validation 類似,如果我們的驗證器返回 false,會在控制臺得到一個警告,這為我們提供了一些有用的信息。

MyTextInput.vue

<script setup>
const emit = defineEmits({
unvalidatedEvent: null, // if we want an event without validation
customChange: (s) => {
if (s && typeof s === 'string') {
return true
} else {
console.warn(`Invalid submit event payload!`)
return false
}
},
})

const handleChange = (event) => {
// no console warning
emit('customChange', event.target.value.toUpperCase())
}

onMounted(() => {
emit('customChange', 1) // not a string, warning!
})
</script>

最佳實踐

使用 emits 定義自定義事件

如果我們不使用defineEmits?,我們仍然可以通過export default?中定義emits選項來跟蹤一個組件的自定義事件。

這對保持良好的組件文檔很重要,如果我們試圖使用一個沒有在 emits 中聲明的事件,也會從Vue那里得到錯誤。

當在 emits 選項中定義了原生事件 (如 change) 時,將使用組件中的事件替代原生事件偵聽器。

<script>
export default {
emits: ["change"] // or can pass object with validators
}
</script>
<template>
<div>
<label>My Custom Input</label>
<input
type="text"
placeholder="Custom input!"
@input='$emit("change", $event.target.value)'
/>
</div>
</template>

正確的事件命令

在 vue3 中,與組件和 prop 一樣,事件名提供了自動的大小寫轉換。如果在子組件中觸發一個以 camelCase (駝峰式命名) 命名的事件,你將可以在父組件中添加一個 kebab-case (短橫線分隔命名) 的監聽器。

然而,如果你使用的是Vue 2,事件名稱沒有自動的大小寫轉換,由于v-on指令會自動將你的事件名稱轉換為小寫,所以camelCase命名的事件不可能被監聽到。

例如,如果我們發出了一個名為myEvent?的事件,監聽my-event將無法工作。

作者:Noveo 譯者:小智  來源:learnvue 原文:https://learnvue.co/tutorals/vue-emit-guide?

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2023-04-27 11:07:24

Setup語法糖Vue3

2020-09-19 21:15:26

Composition

2021-12-15 08:23:42

Vue3 插件Vue應用

2022-06-13 08:39:21

Vue3API

2022-06-21 12:09:18

Vue差異

2024-03-15 08:45:31

Vue 3setup語法

2021-12-01 08:11:44

Vue3 插件Vue應用

2022-08-04 14:38:49

vue3.2setup代碼

2021-12-16 08:27:54

Vue3 插件Vue應用

2020-10-20 09:51:51

Vue 3 的組合

2020-10-20 09:30:13

Vue 3 API 數據

2024-10-14 09:34:39

vue3通信emit

2024-03-01 11:32:22

Vue3APIVue.js

2025-03-26 10:29:22

Vue3前端API

2021-12-02 05:50:35

Vue3 插件Vue應用

2021-07-29 12:05:18

Vue3Api前端

2024-06-25 12:20:31

2022-03-24 15:28:43

Vue開發框架

2011-04-13 13:38:57

選項APIBlackBerry

2021-03-30 08:05:39

Vue 3 生命周期Vue2
點贊
收藏

51CTO技術棧公眾號

精灵使的剑舞无删减版在线观看| 日韩精品久久久久久久| 色婷婷综合久久久中字幕精品久久| 成人午夜激情视频| 国产97在线|亚洲| 黑人と日本人の交わりビデオ| 亚洲三级电影| 精品国产户外野外| 中文字幕精品—区二区日日骚| 亚洲第一色视频| 性xx色xx综合久久久xx| 日韩网站免费观看高清| 少妇伦子伦精品无吗| 久久夜夜操妹子| 亚洲黄色性网站| 日本一区二区三区免费看| 国产剧情精品在线| 久久精品人人| 天堂在线亚洲视频| 欧美日韩视频专区在线播放| 美女av免费观看| 懂色av中文在线| 全球最大av网站久久| 亚洲精品国久久99热| 欧美区高清在线| 国产黄色小视频在线观看| 国产美女一区| 欧美极品美女视频网站在线观看免费| 伊人网在线视频观看| 视频欧美一区| 欧美日韩国产天堂| 欧美 国产 小说 另类| 伊人影院蕉久影院在线播放| 亚洲国产精品ⅴa在线观看| 国产精品一区二区三区免费| 92久久精品一区二区| 久久婷婷激情| 国产综合在线看| 欧美片一区二区| 久久国产成人精品| 国产亚洲精品美女| 熟女俱乐部一区二区| 欧美尿孔扩张虐视频| 欧美成人精精品一区二区频| 中文字幕一区久久| 国产黄色精品| 欧美日韩国产123区| 日韩中文字幕免费在线| 欧美xo影院| 色94色欧美sute亚洲13| 黄色片视频在线播放| 国产直播在线| 红桃视频在线观看一区二区| 亚洲影视资源网| 强开小嫩苞一区二区三区网站| 在线观看av的网站| 国产精品国产三级国产专播品爱网 | 亚洲一区二区91| 狠狠综合久久| 韩国福利视频一区| 国产福利拍拍拍| 中文久久精品| 国产成人精品久久二区二区| 99re这里只有精品在线| 日韩avvvv在线播放| 精品中文字幕久久久久久| 插我舔内射18免费视频| 久久悠悠精品综合网| 国产视频在线观看一区二区| 91中文字幕永久在线| 欧美日韩在线二区| 日韩中文字幕久久| 欧美三级小视频| 日韩一区二区久久| 国产成+人+综合+亚洲欧美丁香花| 波多野结衣家庭主妇| 日本aⅴ免费视频一区二区三区| 国产精品午夜视频| 精品国产无码一区二区三区| 成人国产精品免费观看视频| 欧美激情论坛| 麻豆传媒在线完整视频| 丁香激情综合国产| 精品国产综合| 91短视频版在线观看www免费| 1区2区3区精品视频| 国产男女免费视频| 精品视频在线一区二区在线| 欧美一区二区二区| 日韩网站在线播放| 国产精品久久久久久久免费观看| 两个人的视频www国产精品| 国产精品自拍视频一区| 久久亚洲图片| 97超碰人人看人人| 邻居大乳一区二区三区| 亚洲欧美日韩系列| 国产日产欧美视频| 欧美视频二区欧美影视| 亚洲最大黄网| 亚洲成人在线网| 日本美女bbw| 在线精品亚洲| 国产欧美精品在线播放| 国 产 黄 色 大 片| 国产精品无码永久免费888| 国产曰肥老太婆无遮挡| 超碰在线国产| 亚洲一区中文日韩| www亚洲成人| 欧美a一欧美| 蜜臀久久99精品久久久久久宅男| 中文字幕免费在线观看视频| 韩国女主播成人在线观看| 久久99精品久久久久久水蜜桃| 国产视频一区二区| 91成人免费在线视频| 久久国产劲爆∧v内射| 色呦哟—国产精品| 欧美又大又硬又粗bbbbb| av中文字幕播放| 国产精品你懂的| 黄在线观看网站| 国产精品毛片久久久| www.欧美三级电影.com| 国产乱码77777777| 久久夜色精品国产噜噜av| www.成年人视频| 日韩视频一区二区三区四区| 日韩在线观看你懂的| 国产乱码77777777| 2021国产精品久久精品| 九九爱精品视频| 9l视频自拍九色9l视频成人| 超碰精品一区二区三区乱码| 亚洲精品国产精品乱码视色| 91看片淫黄大片一级| 成人免费播放器| 136导航精品福利| 欧美精品一区三区| 99精品视频免费看| 中文字幕日韩av资源站| 日韩不卡一二三| jvid福利在线一区二区| 国产99在线|中文| 亚洲欧美日韩成人在线| 午夜精品一区在线观看| 香港三日本8a三级少妇三级99| 天天色天天综合| 日韩国产欧美三级| 日韩色妇久久av| 日韩精品第一| 中文字幕亚洲情99在线| 中文字幕一区二区三区免费看| 欧美激情一区在线| 欧美一级裸体视频| 久久影视一区| 91亚洲精品视频| 伊人春色在线观看| 欧美mv日韩mv国产网站| 国产精品99精品| 91丨九色丨蝌蚪富婆spa| av黄色在线网站| 亚洲综合图色| 国产精品视频在线播放| 欧美日韩欧美| 91麻豆精品国产91久久久使用方法| 五月婷婷综合激情网| 国产一区二区三区在线观看精品 | 999国产精品| 91免费观看| 成人超碰在线| 亚洲人精选亚洲人成在线| 国产情侣免费视频| 亚洲欧美日韩系列| 精品熟女一区二区三区| 丝袜美腿高跟呻吟高潮一区| 一级做a爰片久久| 亚洲精品黑牛一区二区三区| 国模精品视频一区二区| 国产在线视频网站| 欧美一区二区三区在线视频| 久久久久无码精品国产| xnxx国产精品| 污污视频在线免费| 一本久道久久久| 亚洲日本精品一区| 国产精品久久久久久久久久白浆| 国产成人精品视| 在线观看中文| 国产一区二区三区不卡av| 色多多国产成人永久免费网站 | 一本一生久久a久久精品综合蜜| 爱情电影网av一区二区| 97成人在线视频| 好吊日视频在线观看| 日韩成人在线视频观看| 自拍偷拍福利视频| 亚洲午夜精品一区二区三区他趣| 波多野结衣一本| 国产乱码精品一品二品| 欧美黄色一级片视频| 一区二区三区午夜视频| 九九九九精品九九九九| 伊人久久大香线蕉综合影院首页| 午夜精品福利视频| 国产在线观看a视频| 亚洲男人天堂2023| 亚洲黄色小说网| 欧美吞精做爰啪啪高潮| 黄色小说在线观看视频| 国产精品久久久99| 中文字幕 自拍| k8久久久一区二区三区| 久久6免费视频| 日韩综合小视频| 少妇高潮毛片色欲ava片| 91精品国产调教在线观看| 日韩精品极品视频在线观看免费| 成人另类视频| av电影成人| 999色成人| 91精品久久久久久久久久入口 | 色欧美88888久久久久久影院| 欧美日韩精品一区二区三区视频播放| 国产日韩精品一区| 丰满大乳奶做爰ⅹxx视频| 国产成人精品午夜视频免费| 免费黄频在线观看| 麻豆91精品视频| 中文字幕亚洲一区| 成人a v视频| 欧美色视频日本版| 国产一级精品视频| 香港成人在线视频| 精品深夜av无码一区二区老年| 亚洲天堂成人网| 小泽玛利亚一区| 亚洲欧洲精品一区二区精品久久久| 三上悠亚影音先锋| 久久伊99综合婷婷久久伊| 日韩免费高清一区二区| 丁香激情综合五月| 人妻 日韩 欧美 综合 制服| 国产99精品视频| 国产成人精品一区二区三区在线观看| 国产精品综合在线视频| 激情成人在线观看| 国产成人av一区二区| 中文字幕永久免费| www..com久久爱| free性中国hd国语露脸| 久久综合九色综合97婷婷女人| av无码一区二区三区| 99精品在线免费| 麻豆精品免费视频| 日本一区二区三区在线观看| 美国黑人一级大黄| 国产精品国产三级国产aⅴ中文| 美女福利视频网| 亚洲免费资源在线播放| 青娱乐免费在线视频| 亚洲福利一区二区三区| 日韩女优在线观看| 色哟哟一区二区三区| 懂色av蜜臀av粉嫩av喷吹 | 一起草av在线| 欧美一区二区网站| 日韩一级在线播放| 亚洲图片欧美午夜| 毛片在线看网站| 欧美精品精品精品精品免费| 日本不卡网站| 国产有码在线一区二区视频| 日韩精品视频中文字幕| 精品视频一区二区不卡| 亚洲国产精品一区二区久久hs| 亚洲欧美综合色| 日本五十熟hd丰满| 欧美在线观看视频一区二区| 国产麻豆免费观看| 日韩电影在线观看中文字幕| jizz在线观看视频| 欧美黑人性视频| 日韩一区二区三区在线免费观看| 成人一区二区电影| 欧美黑人做爰爽爽爽| 亚洲高清视频一区| 精品二区久久| 国产区二区三区| 成人毛片在线观看| 国产毛片欧美毛片久久久| 亚洲综合视频网| 午夜视频网站在线观看| 精品国产露脸精彩对白 | 久久精品国产69国产精品亚洲| 亚洲卡一卡二| 国产精品女主播| 成人自拍在线| 永久免费精品视频网站| 亚洲看片免费| 91欧美视频在线| 91在线小视频| 久久免费视频精品| 欧美日韩亚洲综合| 色婷婷av一区二区三区之e本道| 永久免费毛片在线播放不卡| free性m.freesex欧美| 国产日韩av在线| 米奇777超碰欧美日韩亚洲| 蜜臀av性久久久久蜜臀av| 可以免费看不卡的av网站| 午夜福利三级理论电影| 日韩码欧中文字| 黄色一区二区视频| 日韩国产精品亚洲а∨天堂免| 成a人片在线观看| 国产精品日韩在线播放| 亚洲激情播播| 久久久影视精品| 久久这里只有精品9| 亚洲电影天堂av| 欧美伦理免费在线| 亚洲aⅴ男人的天堂在线观看| 国产一区二区三区网| 久久国产亚洲精品无码| 成人av电影免费在线播放| 欧美精品99久久久| 欧美一区二区精品| 黄色在线视频网站| 国产精品一二三在线| 欧洲杯足球赛直播| 一本久道中文无码字幕av| 91在线国产观看| 欧美三级韩国三级日本三斤在线观看| 日韩欧美在线综合网| 亚洲羞羞网站| 92国产精品久久久久首页| 国产精品久久天天影视| 污网站在线免费| 亚洲色图欧美激情| 国产乱码精品一区二区三区精东| 色yeye香蕉凹凸一区二区av| 久久久久久久性潮| 一区二区三区四区免费视频| 免费高清不卡av| 一区二区三区在线播放视频| 欧美日韩色综合| 黄色免费网站在线观看| 成人在线精品视频| 91精品啪在线观看国产18| 肉色超薄丝袜脚交| 一区二区三区自拍| 免费a级片在线观看| 97视频在线观看免费| 欧美理伦片在线播放| 国产av无码专区亚洲精品| 国产日韩欧美精品在线| 中文字幕男人天堂| 久久深夜福利免费观看| 日本免费一区二区三区视频| 精品视频在线观看一区二区| 成人性生交大片| 国产专区第一页| 中文字幕日韩免费视频| 亚洲日韩中文字幕一区| 欧美图片激情小说| 久久免费的精品国产v∧| 一区两区小视频| 欧美乱人伦中文字幕在线| 韩国女主播一区二区三区| 久久久久久久久久久福利| 欧美激情综合五月色丁香小说| 99热这里只有精品在线播放| 伊人成人在线视频| 亚洲精品成人无码熟妇在线| 欧美午夜一区二区三区| 操你啦视频在线| 精品视频一区在线| 久久精品国产第一区二区三区| 欧美精品久久久久性色| 亚洲欧美日韩高清| 国产在线不卡一区二区三区| heyzo亚洲| 亚洲欧洲精品一区二区三区不卡| 日本高清视频www| 国产精品老牛影院在线观看| 韩国自拍一区| 非洲一级黄色片| 精品久久久三级丝袜| 性欧美1819sex性高清| 97在线免费视频观看| 久久久久久久久久久久久久久99| 国产又粗又猛视频| 欧美一级电影免费在线观看| 亚洲成人最新网站| 好吊视频在线观看| 精品国产伦一区二区三区观看方式| 日韩av电影资源网| 久久国产精品视频在线观看|