Angular Event Manager Plugin — Advanced Feature You Didn't Know.
- Angular는
keyup.enter와 같은 특정 키 이벤트를 처리하기 위해 내장된 마법이 아닌, 이벤트 매니저 플러그인 시스템을 활용합니다. 🔑
- 개발자는 이 확장 가능한 플러그인 생태계를 통해
submit.prevent와 같이 자신만의 커스텀 이벤트 구문을 정의하고 처리할 수 있습니다. 🛠️
- 기본 폼 제출 시 페이지 새로고침과 같은 기본 동작 방지(
preventDefault())를 반복적으로 호출하는 불편함을 커스텀 플러그인으로 해결하여, 더 선언적이고 깔끔한 코드를 작성할 수 있습니다. 🚫
- Angular의 이벤트 바인딩은 이벤트 매니저라는 추상화 계층을 통해 실제 DOM 이벤트 리스너 바인딩을 전문 플러그인에 위임합니다. 🔗
- 커스텀 플러그인은
EventManagerPlugin 추상 클래스를 상속받아 supports와 addEventListener 메서드를 구현해야 합니다. 🏗️
supports 메서드는 특정 이벤트에 대해 플러그인이 이벤트를 처리할 수 있는지 여부를 Event Manager에 알립니다. (예: 이벤트 이름이 .prevent로 끝나는지 확인) ✅
addEventListener 메서드는 실제 DOM 요소에 이벤트 리스너를 등록하며, 여기서 event.preventDefault() 호출 및 템플릿에 정의된 핸들러 함수 실행과 같은 커스텀 로직을 주입할 수 있습니다. 👂
- 메모리 누수를 방지하기 위해
addEventListener 메서드는 이벤트 리스너를 제거하는 클린업 함수를 반환해야 합니다. ♻️
- 클린업 로직을 직접 구현하는 대신,
super.addEventListener()를 사용하여 기본 플러그인에 이벤트 등록을 위임하고, 수정된 콜백 함수를 전달하여 자동으로 클린업이 이루어지도록 할 수 있습니다. 🤝
- 이 기술은 RxJS와 결합하여 디바운스된 이벤트와 같은 더욱 복잡하고 재사용 가능한 이벤트 처리 로직을 구현하는 데 활용될 수 있습니다. 🚀