$emit
让我们可以发送出自订的事件,例如: 触发特定的事件(关闭 popup) 或是 子元件向外传递资料。
呼叫每一个 $emit
可以传入两个参数:
使用 v-on
指令或是缩写 @
来监听 DOM 被触发的事件。例如: v-on:click="methodName"
或 @click="methodName"
有以下三种方式:
inline events
ex:
<template>
<my-input @custom-change="logChange"/> <!-- 监听 custom-change 这个事件-->
</template>
<script>
import MyInput from './components/MyInput.vue'
export default {
components: {
MyInput
},
methods: {
logChange (event) {
console.log(event)
}
}
}
</script>
<template>
<div>
<p> Wrapper for a text input </p>
<input
type="text"
placeholder="Custom input!"
@change='$emit("customChange", $event.target.value)' /* INLINE EMIT! */
/>
</div>
</template>
Options API
使用 this.$emit
!
ex:
<template>
<div>
<p> Wrapper for a text input </p>
<input
type="text"
placeholder="Custom input!"
@change='customChange'
/>
</div>
</template>
<script>
export default {
methods: {
customChange (event) {
this.$emit("customChange", event.target.value)
}
}
}
</script>
Composition API
因为在元件建立前就会执行 setup
,必须使用 setup
第二个参数来先取得 emit
方法
两种方式:
<template>
<div>
<p> Wrapper for a text input </p>
<input
type="text"
placeholder="Custom input!"
@change='customChange'
/>
</div>
</template>
<script>
export default {
setup (props, context) {
const customChange = (event) => {
context.emit("customChange", event.target.value)
}
return {
customChange
}
}
}
</script>
<!-- OR -->
<script>
export default {
setup (props, { emit }) {
const customChange = (event) => {
emit("customChange", event.target.value)
}
return {
customChange
}
}
}
</script>
在 Vue3,事件名称会自动转换大小写,如果在子元件中使用camelCase
,父元件会监听到kebab-case
的事件
ex:
// 子元件 发出事件
this.$emit('myEvent')
<!-- 父元件 监听事件-->
<my-component @my-event="doSomething"></my-component>
v-model
修饰符 Modifiers在处理事件时,很常使用 event.preventDefault()
或 event.stopPropagation()
,虽然可以把这些 DOM 事件相关的部分写入 methods
中,但尽可能 methods
单纯的包含资料逻辑就好,所以可以使用 Vue 提供给 v-on
的事件修饰符。以点.
表示的後缀。
.stop
阻挡事件冒泡.prevent
阻挡预设行为.capture
以捕获形式触发事件.self
只触发元素自己的事件.once
指定事件只触发一次ex:
<form v-on:submit.prevent="onSubmit">...</form>
.prevent
修饰符告诉v-on
这个directive 在触发事件时,要去呼叫event.preventDefault()
<!-- click 事件只会被触发一次 -->
<a @click.once="doThis"></a>
A Guide to Vue $emit – How to Emit Custom Events in Vue
每日一句:
克服恐惧,好像才能变的勇敢
<<: Day 0x18 - 使用 Laravel 串接之结尾及自我检讨
>>: Day 19 ATT&CK for ICS - Evasion(1)
学习 Angular 的过程中,遇到了一些教学资源不见得会遇到的问题,还真是家常便饭,而且你个人电脑...
前言 Sass对现在前端来说已经是不可或缺的技术,不仅用起来顺手,如果熟悉之後切版的速度将会加快非常...
架构图 前言 表达式是程序进行算术运算中的表示方式,我们可以简单地把表达式拆解为表达式 = 运算子 ...
今天主要是分享如何抓取灰机WIKI里物品日文名称 物品页面的右边会有各国的名称,这是我们要抓取的目标...
我有一个放着很多测试程序的资料夹,每次要用新的套件或测试逻辑的时候, 为了要排除其他影响因素, 我会...