이 글에서는 Vue 이벤트 처리에 대한 기본 지식을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
Vue 이벤트 처리는 모든 Vue 프로젝트에 필요한 측면입니다. 이는 사용자 입력을 캡처하고, 데이터를 공유하고, 기타 다양한 창의적인 방법을 사용하는 데 사용됩니다. [관련 추천: "vue.js Tutorial"]
이 글에서는 이벤트 처리에 대한 기본 지식을 소개하고 몇 가지 코드 예제를 제공합니다. 여기에는 제가 가장 유용하다고 생각하는 팁/방법만 포함되어 있습니다. Vue가 할 수 있는 모든 것에 대해 자세히 알아보려면 Vue 문서를 확인하세요.
v-on
지시어(@
라고 함)를 사용하여 DOM 이벤트를 수신하고 핸들러 메서드 또는 인라인 Javascript를 실행할 수 있습니다. v-on
指令(简称@
),我们可以监听DOM事件并运行处理程序方法或内联Javascript。
// v-on 指令 <div v-on:click='handleClick' /> // OR <div @click='handleClick' />
任何Web框架中的常见用例都是希望子组件能够向其父组件发出事件,这也是双向数据绑定原理。
常见一个示例是将数据从 input
组件发送到父表单。
根据我们使用的是Options API还是Composition API,发出事件的语法是不同的。
在 Options API 中,我们可以简单地调用this.$emit(eventName, payload)
,示例如下:
export default { methods: { handleUpdate: () => { this.$emit('update', 'Hello World') } } }
但是,Composition API 使用方式与此不同。 需要在 Vue3 提供的 setup
方法使用emit
方法。
只要导入context对象,就可以使用与Options API相同的参数调用emit
。
export default { setup (props, context) { const handleUpdate = () => { context.emit('update', 'Hello World') } return { handleUpdate } } }
当然,我在项目中经常使用解构的方式来使用:
export default { setup (props, { emit }) { const handleUpdate = () => { emit('update', 'Hello World') } return { handleUpdate } } }
完美!
无论我们使用Options 还是 Composition API,父组监听的方式都是一样的。
<HelloWorld @update='inputUpdated'/>
首先,我们可以在模板中使用$ event访问传递的值。
如果在组件 emit 出去方法有传递值,我们可以通过两种不同的方式捕获它,这取决于我们是使用内联还是使用方法。
第一种是在模板中使用$event
访问传递的值。
<HelloWorld @update='inputUpdated($event)'/>
第二,使用方法来处理事件,则传递的值将作为第一个参数自动传递给我们的方法。
<HelloWorld @update='inputUpdated'/> // ... methods: { inputUpdated: (value) => { console.log(value) // WORKS TOO } }
下面是我们可以在v-on
指令中捕获的主要DOM鼠标事件列表:
<div @mousedown='handleEvent' @mouseup='handleEvent' @click='handleEvent' @dblclick='handleEvent' @mousemove='handleEvent' @mouseover='handleEvent' @mousewheel='handleEvent' @mouseout='handleEvent' > Interact with Me! </div>
对于单击事件,我们还可以添加鼠标事件修饰符来限制哪个鼠标按钮将触发我们的事件。有三个: left
,right
和 middle
。
<!-- 这只会触发鼠标左键 --> <div @mousedown.left='handleLeftClick'> Left </div>
我们可以听三个DOM键盘事件:
<input type='text' placeholder='Type something' @keypress='handleKeyPressed' @keydown='handleKeyDown' @keyup='handleKeyUp' />
通常,我们想检测某个键上的这些事件,有两种方法可以执行此操作。
keycodes
Vue具有某些键的别名(enter
, tab
, delete
, esc
, space
, up
, down
, left
, right
)
<!-- Trigger even when enter is released --> <input type='text' placeholder='Type something' @keyup.enter='handleEnter' /> <!-- OR --> <input type='text' placeholder='Type something' @keyup.13='handleEnter' />
对于某些项目,我们可能只想在用户按下修饰键的情况下触发事件。 修饰键类似于Command
或shift
。
在Vue中,有四个系统修饰符。
shift
alt
ctrl
meta (在mac上是CMD,在Windows上是Windows键)
这对于在Vue应用程序中创建诸如自定义键盘快捷键之类的功能非常有用。
<!-- 自定义快捷方式,杨使用Shift + 8 创建列表 --> <input type='text' placeholder='Type something' @keyup.shift.56='createList' />
在Vue文档中,还有一个exact
<!-- 自定义快捷方式,只有Shift + 8 这两个按下时才会创建列表--> <input type='text' placeholder='Type something' @keyup.shift.56.exact='createList' />상위 구성 요소에 사용자 정의 이벤트 내보내기
input
구성 요소에서 상위 양식으로 데이터를 보내는 것입니다. 이벤트를 내보내는 구문은 Options API그러나 Composition API는 다르게 사용됩니다. Vue3에서 제공하는를 사용하는지
Composition API를 사용하는지에 따라 다릅니다.
Options API에서는 간단히
this.$emit(eventName, payload)
를 호출하면 되는데, 예시는 다음과 같습니다.<!-- 阻止默认行为 --> <form @submit.prevent> <!-- 阻止冒泡 --> <form @submit.stop='submitForm'> <!-- 阻止默认行为和冒泡 --> <form @submit.stop.prevent='submitForm'> <!-- 防止事件被多次触发 --> <p @close.once='handleClose'>
setup
메소드 중 emit
메소드를 사용해야 합니다. 컨텍스트 개체를 가져오는 한 옵션 API와 동일한 매개변수를 사용하여 emit
을 호출할 수 있습니다. rrreee
$event
를 사용하여 전달된 값에 액세스하는 것입니다. 🎜rrreee🎜둘째, 이벤트를 처리하는 메서드를 사용하면 전달된 값이 자동으로 첫 번째 매개변수로 메서드에 전달됩니다. 🎜rrreee🎜Mouse Modifiers🎜🎜다음은 v-on
지시문에서 캡처할 수 있는 주요 DOM 마우스 이벤트 목록입니다. 🎜rrreee🎜클릭 이벤트의 경우 마우스 이벤트 수정자를 Limit에 추가할 수도 있습니다. 어떤 마우스 버튼이 이벤트를 트리거할 것인지. 왼쪽
, 오른쪽
, 가운데
의 세 가지가 있습니다. 🎜rrreee🎜Keyboard Modifiers🎜🎜우리가 들을 수 있는 세 가지 DOM 키보드 이벤트가 있습니다: 🎜rrreee🎜일반적으로 우리는 특정 키에서 이러한 이벤트를 감지하려고 합니다. 이를 수행하는 방법에는 두 가지가 있습니다. 🎜enter
, 탭
, 삭제
, esc
, space
, 위로
, 아래로
, 왼쪽
, 오른쪽
)🎜Command
또는 shift
와 유사합니다. 🎜🎜Vue에는 네 가지 시스템 수정자가 있습니다. 🎜exact
수정자가 있습니다. 🎜rrreee🎜🎜이벤트 수정자🎜🎜🎜모든 DOM 이벤트에 대해 일부 수정자를 사용하여 실행 방식을 변경할 수 있습니다. 전파를 중지할지 기본 작업을 방지할지 여부에 관계없이 Vue에는 두 개의 내장 DOM 이벤트 수정자가 있습니다. 🎜rrreee🎜🎜영어 원본 주소: https://segmentfault.com/a/1190000039938779🎜🎜저자: Fernando Doglio🎜🎜번역자: Front-end Xiaozhi🎜🎜🎜더 많은 프로그래밍 관련 지식을 보려면 다음을 방문하세요: 🎜Programming Video🎜 ! ! 🎜위 내용은 Vue는 이벤트를 어떻게 처리하나요? 관련 기초지식 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!