inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념

혹시 전역으로 이벤트리스너 설정이 가능한가요?

936

pm

작성한 질문수 4

1

안녕하세요~ main.js 같은 곳에 전역으로 리스너를 선언해서 각각 컴포넌트 내에서 일어나는 클릭이나 router 변경 등을 감지하고 싶은데요!

$(document).ready(function() {
    let logoElement = document.getElementById('logo')
    logoElement.addEventListener('click', function() {
        console.log("로고를 클릭했습니다.")
    })

    let imgElement = document.querySelector('.img')
    imgElement.addEventListener('click', function() {
        console.log("이미지를 클릭했습니다.")
    })
})

이런식으로 엘리먼트 하나하나 클릭할때마다 콘솔이 찍혔으면 좋겠는데 가능한가요?

부모-자식으로 구성되어있는데 하위의 하위(=자식의 자식) 레벨의 컴포넌트에서의 클릭도 인식할 수 있나요?

각 Vue 파일마다 mounted()에서 $(document).ready(~)를 통해 이벤트리스너를 달아야하는건지, 아니면 한 파일에 전역으로 선언해서 공통으로 사용할 수 있는건지 궁금해요!

또 JQuery가 아닌 Vue로 구현할 수 있는 방식이 있나요?

vuejs javascript

답변 1

0

캡틴판교

안녕하세요 pm님, 좋은 질문이네요 :) 뷰에서 제공하는 v-on:click 디렉티브는 위에서 적어주신 이벤트 리스너 부착 방식과 동일합니다. 따라서, 이벤트 propagation을 이용해서 최상위 HTMLElement에 클릭 이벤트 리스너를 달아주시고 아래에서 어떤 엘리먼트에서 클릭된 것인지 구분하시면 될 것 같습니다. 이 부분은 뷰의 특징이 아니라 자바스크립트의 기본적인 이벤트 전파 방식입니다. 혹시 개념이 생소하시면 아래 글 읽어보시면 될 것 같아요 :)

https://joshua1988.github.io/web-development/javascript/event-propagation-delegation/

깃 권한 요청 드립니다

0

50

1

깃 권한 신청

0

50

1

깃 권한 요청드립니다.

0

111

1

깃허브 권한 요청 드립니다

0

144

1

깃허브 권한 요청 드립니다

0

160

1

깃허브 권한 요청 드립니다

0

167

1

깃허브 권한 요청 드립니다.

0

154

1

안녕하세요 vue 2.7로 수강하고 있는 학생입니다. 실무에서 최하위 자식의 props와 watch의 관계를 여쭈고자 합니다.

0

207

1

ide 타입추론 기능 사용할 수 없을까요??

0

205

1

컴포넌트 링크는 vue peek 익스텐션 설치가 필수인가요??

0

227

1

Vue3로 진행중입니다

1

338

1

Vue router-link 사용시 같은 url이면

1

506

1

vue3 에러 메세지...

1

670

2

id ="app" 중복

0

271

2

use undefined 에러가 나옵니다.

1

317

2

깃허브 권한 요청드립니다.

1

358

2

권한요청드립니다.

1

299

2

Vue3에서 구글 애드센스 탑재하기

1

435

2

코드가 정상 작동 되는건지 ...

1

302

1

강의에서 api를 따로 빼셨는데 얻는 이점이 뭐죠?

1

243

1

vuex 적용시 질문

1

285

2

라우터 버전이 안맞는데 어떤걸 써야하나요

1

377

2

UserView에 id 속성만 undefined로 넘어오는데 이유를 모르겠습니다..

1

450

2

권한요청 드립니다!

1

270

2