본문 바로가기
프론트엔드/Vue.js

컴포넌트 속성 상속

by step 1 2021. 8. 4.
반응형

컴포넌트를 사용할 때 컴포넌트 내부에 최상위 객체(template 바로 밑 요소)가 한개 이상일 경우 컴포넌트를 사용하는 쪽에서 스타일이나 클래스같은 속성을 직접적으로 선언하여도 적용이 안된다. 따라서 컴포넌트 쪽에 설정을 추가하여 

사용자가 원하는 속성을 적용 시킬 수 있다.

 

script 부분

// 컴포넌트를 사용하는 쪽에서 속성을 지정할 때 사용여부
  inheritAttrs: false,

 

Html 부분

  <!-- App.vue 파일에서 지정한 속성중 원하는 속성만 사용하는 방법 -->
  <h1
    :class="$attrs.class"
    :style="$attrs.style">
    App.vue 파일에서 지정한 속성중 원하는 속성만 사용하는 방법
  </h1>
  <!-- 속성을 한번에 적용하는 방법 -->
  <h1 v-bind="$attrs">
    속성을 한번에 적용하는 방법
  </h1>

 

App.vue 코드

<template>
  <MyBtn
    class="happy"
    style="color:red">
    Banana
  </MyBtn>
</template>

<script>
import MyBtn from '~/components/MyBtn2'

export default {
  components: {
    MyBtn
  }
}
</script>

 

컴포넌트 파일(MyBtn2.vue)

<template>
  <div
    class="btn">
    <slot></slot>
  </div>
  <!-- App.vue 파일에서 지정한 속성중 원하는 속성만 사용하는 방법 -->
  <h1
    :class="$attrs.class"
    :style="$attrs.style">
    App.vue 파일에서 지정한 속성중 원하는 속성만 사용하는 방법
  </h1>
  <!-- 속성을 한번에 적용하는 방법 -->
  <h1 v-bind="$attrs">
    속성을 한번에 적용하는 방법
  </h1>
</template>

<script>
export default {
  // 컴포넌트를 사용하는 쪽에서 속성을 지정할 때 사용여부
  inheritAttrs: false,
  // 컴포넌트가 생성된 직 후
  created() {
    console.log(this.$attrs)
  }
  
}
</script>
<style scoped lang="scss">
.btn {
  display: inline-block;
  margin: 4px;
  padding: 6px 12px;
  border-radius: 4px;
  background-color: gray;
  color: white;
  cursor: pointer;
}

</style>

 

브라우저 확인

콘솔 확인

반응형

'프론트엔드 > Vue.js' 카테고리의 다른 글

컴포넌트 - slot  (0) 2021.08.04
컴포넌트 - Emit  (0) 2021.08.04
컴포넌트 - 기초  (0) 2021.08.03
폼 입력 - 바인딩  (0) 2021.08.02
이벤트 핸들링 - 키 수식어  (0) 2021.08.02