inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Vue.js 시작하기 - Age of Vue.js

[실습 풀이] event emit 실습 풀이

해당코드에서 addNum을 하위메서드 이름으로하면안되는데 왜그런가요 increase로만바꾸면동작합니ㅏㄷ.

365

support

작성한 질문수 2

1

   <div id="app">
        <p>{{num}}</p>
        <!-- <app-header v-on:하위 컴포넌트에서 발생한 이벤트 이름="상위 컴포넌트의 메서드 이름"></app-header> -->
        <app-header v-on:pass="logText"></app-header>
        <app-content v-on:addNum="numPlus"></app-content>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var appHeader = {
            template: '<button v-on:click="passEvent">click me</button>',
            methods: {
                passEvent: function () {
                    this.$emit('pass');
                }
            }
        }

        var appContent = {
            template: '<button v-on:click="addNumber">add</button>',
            methods: {
                addNumber: function () {
                    this.$emit('addNum');
                }
            }

        }
        new Vue({
            el: '#app',
            components: {
                'app-header': appHeader,
                'app-content': appContent
            },
            methods: {
                logText: function () {
                    console.log('hi');
                },
                numPlus: function () {
                    this.num = this.num + 1;

                }
            },
            data: {
                num: 10
            }
        });

javascript vue.js

답변 2

0

캡틴판교

안녕하세요, 이벤트 이름과 메서드 이름을 구분해서 다시 해보시겠어요? :)

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.
해당 코드에서 addNum을 하위 메서드 이름으로 사용하지 못하는 이유는 Vue.js에서 이벤트를 전달하기 위해 특정한 이름을 사용하기 때문입니다. v-on 디렉티브를 통해 상위 컴포넌트에서 하위 컴포넌트로 이벤트를 전달할 때, 하위 컴포넌트에서 해당 이벤트를 수신하기 위해서는 emit() 메서드를 사용해야 합니다. 그리고 emit() 메서드의 인자로는 이벤트 이름을 입력해야 합니다.

따라서, addNum 대신에 increase와 같은 다른 이름을 사용하면 정상적으로 동작할 수 있습니다.

해당 코드에서 상위 컴포넌트에서 이벤트를 수신하는 메서드인 numPlus() 메서드는 하위 컴포넌트의 이벤트 이름과 일치하지 않기 때문에 동작하지 않을 수 있습니다. 상위 컴포넌트 메서드와 하위 컴포넌트 이벤트 이름을 동일하게 맞춰주시면 정상적으로 동작할 것입니다.

예를 들어, 다음과 같이 코드를 수정할 수 있습니다.

그리고 하위 컴포넌트의 addNumber 메서드에서 emit() 메서드의 인자를 increase로 변경해줍니다.

this.$emit(‘increase’);

이렇게 수정하면 addNum 대신에 increase로 이벤트 이름을 변경하고, 상위 컴포넌트에서는 increase 이벤트를 수신하여 numPlus() 메서드를 실행할 수 있습니다.

다른 궁금한 점이 있으시면 언제든지 물어보세요. 좋은 하루되세요~!

개발자 툴에서 Vue가 표시되지 않는 현상.

0

94

2

chrome 확장 devtools 버전 문제

0

81

1

Vue.js not detected가 자꾸 뜹니다

0

86

2

마지막 강의가 안되요

0

57

1

data, computed, watch > Reactivity

0

52

1

f12누르고 개발자도구에 vue 탭이 안생겨요

0

90

1

vue composition api

0

74

1

강의 자료 다운이 될까요?

0

129

1

개발자 도구에서 뷰탭이 안보여요....

0

593

3

프롭스 데이터 질문입니다.

0

113

1

component.html:11 Uncaught ReferenceError: Vue is not defined at component.html:11:20 (anonymous) @ component.html:11

0

141

1

화면이 안떠요,, 이전 이후 강의는 뜨는데..

0

236

6

크롬 확장 프로그램 vue devtools 설치했는데

0

537

2

코드를 수정하고 브라우저의 Vue로 넘어가면 다운이 됩니다.

0

244

1

버튼을 클릭해도 event가 발생하지 않습니다.

0

310

1

vue3 css 경로 표시 문의

1

231

2

개발자도구 vue탭

0

357

1

화면 코드 보기

1

226

2

App.vue 내용 변경했는데 창이 연결할수없대요ㅜㅜ

1

385

2

html/css/js로 작성된 코드를 vue.js로 일부 전환하고자 이 강의를 듣기 시작했습니다.

1

890

2

Vue 개발자 도구에서 다른 기능들이 안보여요!

1

602

2

{{ num }} 이 <app-content> 아래에 들어가 있을때에는 노출이 안됩니다...

1

289

2

뷰 개발자도구 이벤트 타임라인 어느 부분에서 확인가능한건가요

1

401

2

다음 단계 강의는...?

1

387

2