• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

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

23.06.28 17:46 작성 조회수 232

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
            }
        });

답변 2

·

답변을 작성해보세요.

0

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

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.06.30

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

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

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

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

<app-content v-on:increase="numPlus"></app-content>

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

this.$emit(‘increase’);

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

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