인프런 커뮤니티 질문&답변

꾸릉님의 프로필 이미지

작성한 질문수

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

같은 컴포넌트 레벨 간의 통신 방법 구현 2

root 컴포넌트에서 undefined로 받습니다.

21.08.17 20:40 작성

·

524

1

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

선생님 안녕하세요.

제가 진행한 부분은 root 컴포넌트에 데이터를 event발생하여 전달하는 부분까지 진행했습니다.

app-content에서는 num = 10이 잘 등록되었는데,

버튼 이벤트를 발생할 때는 root 컴포넌트에는 undefined로 인식하여 이 값을 대입하는 현상이 있습니다.

오타도 안 난 듯 한데.. 어디서 문제인지 갑이 잡히지 않습니다. ㅠㅠ

에러 : Property or method is not defined on the instance but referenced during render

소스 :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Vue 외부 스크립트 호출 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
        <app-header></app-header>
        <app-content v-on:pass="resultNum(value)"></app-content>
    </div>

    
    <script>
        Vue.config.devtools = true; // 개발도구 사용여부(이건 제가 별도로 찾아서 적용했습니다.)

        var appHeader = {
            template: '<div>header</div>'
        };

        var appContent = {
            // passNum 이라는 버튼을 클릭했을 때 appHeader로 데이터를 전달하는 방법
            // → Root 컴포넌트로 event 발생시키고 appHeader로 props 전달한다.
            //   이때 Root 컴포넌트에서 하위 컴포넌트로 props를 실행하려면 데이터를 선언해야 한다.
            template:  '<div>content'
                     +      '<button v-on:click="passNum">header로 전달</button>'
                     + '</div>',
            methods: {
                passNum: function() {
                    this.$emit('pass', 10);

                }
            }
        };

        // root 컴포넌트
        new Vue({
            el: '#app',
            components: {
                'app-header': appHeader,
                'app-content': appContent
            },
            data: {
                num: 0
            },
            methods: {
                resultNum: function(value) { // num 받기
                    this.num = value;
                }
            }
        });
    </script>
</body>
</html>

답변 5

3

마비미님의 프로필 이미지

2021. 11. 09. 11:16

2달이 지났지만..
resultNum 에 value 가 암묵적으로 넘어오게 돼서 resultNum(value) 가 아니라 resultNum 만 적어주면 오류가 나지 않습니다..!

딩띵님의 프로필 이미지

2022. 01. 03. 13:23

감사합니다... 계속 이문제 해결이 안돼서...  근데 인자값을 적으면 안되는이유 혹시 아시나요?

장기효(캡틴판교)님의 프로필 이미지

2023. 10. 09. 17:53

제가 확인이 늦었네요. 본문에 적어주신 형태대로 resultNum(value)을 선언하시게 되면 value가 템플릿 표현식에 있는 value 값으로 찾게 됩니다. 강의에서 안내한 대로 작성하시는 걸 추천드릴게요 :)

0

장기효(캡틴판교)님의 프로필 이미지

2023. 10. 09. 17:57

템플릿 표현식에 메서드를 연결하는 부분에서 많은 분들이 헷갈려 하시는 것 같네요. 강의에서 안내해 드린대로 메서드 이름을 연결하셔야 합니다. 그렇지 않고 템플릿 표현식에서 resultNum(value) 과 같은 형태로 선언하시게 되면 템플릿 표현식에서 정의된 value 값을 찾게 됩니다.

자세한 내용은 아래 문서 참고하세요.

https://vuejs.org/guide/essentials/event-handling.html#calling-methods-in-inline-handlers

해당 내용은 다음 후속 강의에서 추가로 설명해 두겠습니다 :)

0

박찬성님의 프로필 이미지

2023. 10. 09. 17:28

안녕하세요. 해당 문제에 저도 같은 증상을 보이고 있습니다.

  1. v-on:pass="resultNum(10)"

     

  2. v-on:pass="resultNum"
    이렇게 보내면 정상적으로 출력됩니다. 두번째 방법으로 보내면 $emit에서 여러개를 보내도 value1, vaule2 ... 여러개를 받을 수있네요. 감사합니다.

     

     

장기효(캡틴판교)님의 프로필 이미지

2023. 10. 09. 17:52

네 찬성님. 2번으로 하셔야 합니다 :)

0

으악님의 프로필 이미지

2021. 09. 18. 23:56

안녕하세요. vue 입문자입니다. 이쪽에 관심이 있어서 수강을 하고있어

같은 학생으로써 저도 궁금해서 글 등록해보았습니다. 

 <app-content v-on:pass="resultNum(10)"></app-content>

맨 위쪽 태그부분에   value 인자 를  10  이라는 숫자로 바꾸니 오류는 없는거같은데,

이렇게 하면 공부하시는 부분에 관해 의도된 실습내용과 거리가 멀어진걸까요?..

자세한 내용은 저도 잘 모르겠네요..

 

 

 

0

장기효(캡틴판교)님의 프로필 이미지

2021. 08. 18. 22:31

안녕하세요 꾸릉님, 질문을 자세히 적어주셔서 감사합니다 :) 코드를 보면 뷰 인스턴스 컴포넌트(루트 컴포넌트)의 데이터 속성 num의 기본 값이 0이고 아래 app-content 컴포넌트에서 이벤트가 발생되면 num의 값이 0에서 10으로 변환되어야 할 것 같아요.

Property or method is not defined on the instance but referenced during render

위 에러 메시지는 템플릿 표현식에서 정의되지 않은 데이터 속성이나 메서드가 선언되어 있으면 표시됩니다. 첨부해 주신 코드 상으로는 크게 문제가 없어 보이는데 여전히 문제 현상이 발생하시나요? :)

uws0331님의 프로필 이미지

2022. 07. 30. 11:11

현재에도 그 증상이 아직 있는 것 같습니다. 

아래의 BeomJun Lee님께서 작성하신 문제해결법에 의하여 해결은 했습니다만 어떤게 문젠지를 잘 모르겠네요...

꾸릉님의 프로필 이미지

작성한 질문수

질문하기