먼저 상위(부모) 컴포넌트의 이름은 Topic, 하위(자식) 컴포넌트의 이름은 TopicSearch라고 가정합니다.

 

먼저, 상위 클래스에서 컴포넌트를 삽입할 때 v-on:xxx(약어 @xxx)를 사용해 커스텀 이벤트를 만듭니다.

Topic.vue (일부)

<template>
  <div class="topic">
        <TopicSearch v-on:search="doSearch" v-on:allOrder="doAllOrder"/>
  </div>
</template>

여기서 search. allOrder 는 나중에 this.$emit에서 사용할 이벤트 이름이며. doSearch, doAllOrder는 상위 컴포넌트에 있는 메소드 이름입니다. 왼쪽이 자식 컴포넌트에서 사용할 $emit의 이벤트 이름, 오른쪽은 부모 컴포넌트에서 실행할 메소드라고 생각하면 됩니다.

 

Topic.vue (일부)

methods: {
   
    doSearch(category, keyword) {
      // 해야될 작업
    },
    doAllOrder(order) {
      // 해야될 작업
    }

  }

 

다음 하위 컴포넌트에서 this.$emit을 사용합니다. 이 구문이 실행되면 상위 컴포넌트로 올라가 v-on으로 작성한 커스텀 이벤트가 실행됩니다.

TopicSearch.vue (일부)

methods: {
    search() {
        this.$emit("search", this.searchCategory, this.searchKeyword)
    },
    allOrder() {
        this.$emit("allOrder", this.allOrderStatus)
    }
}

this.$emit의 첫 번째 파라미터는 ‘상위 컴포넌트의 이벤트 이름’을 스트링 형태로 적습니다. 두 번째 파라미터부터는 상위 컴포넌트에서 실행하는 함수에 전달할 파라미터들입니다. 예를 들어 하위 컴포넌트의 search 메소드에 있는 this.$emit은 상위 컴포넌트로 올라가면서 다음 각각 파라미터에 배정됩니다..

  • 하위 컴포넌트의 this.searchCategory는 상위 컴포넌트의 메소드 doSearchcategory에 배정됩니다.
  • 하위 컴포넌트의 this.searchKeyword는 상위 컴포넌트의 메소드 doSearchkeyword에 배정됩니다.

문의 | 코멘트 또는 ayaysir0@naver.com

donaricano-btn
카테고리: WEB: FrontendVue.js

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다