본문 바로가기
Dev/Vue.js

[Vue.js] 컴포넌트

by dev_jsk 2020. 9. 7.
728x90
반응형

뷰 컴포넌트

컴포넌트는 화면의 영역을 구분하여 개발할 수 있는 뷰의 기능으로 컴포넌트 기반으로 화면을 개발하게 되면 코드의 재사용성이 올라가고 빠르게 화면 제작 가능

컴포넌트 등록 실습하기

// component.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <app-header></app-header>
    <app-content></app-content>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    // Vue.component('컴포넌트 이름', '컴포넌트 내용');
    Vue.component('app-header', {
      template: '<h1>Header</h1>'
    });

    Vue.component('app-content', {
      template: '<div>content</div>'
    });

    new Vue({
      el: '#app'
    });
  </script>
</body>
</html>

동작 확인

전역 컴포넌트 등록 실습하기

// component.html

// 전역 컴포넌트
// 실제 서비스 구현 시 전역 컴포넌트 구현할 일이 없다.
Vue.component('...', {
  template: ...
});

지역 컴포넌트 등록 실습하기

// component.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    ...
    <app-footer></app-footer>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    // 전역 컴포넌트
    ...

    new Vue({
      el: '#app',
      // 지역 컴포넌트 등록 방식
      components: {
        // '컴포넌트 이름': '컴포넌트 내용'
        'app-footer': {
          template: '<footer>footer</footer>'
        }
      }
    });
  </script>
</body>
</html>

동작 확인

전역 컴포넌트와 지역 컴포넌트의 차이점

  • 지역 컴포넌트는 특정 컴포넌트에서 사용할 것만 컴포넌트로 등록, 사용
  • 전역 컴포넌트는 플러그인이나 라이브러리 같은 전역으로 사용해야하는 것만 전역 컴포넌트로 등록, 사용

컴포넌트와 인스턴스와의 관계

// component.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <app-header></app-header>
    <app-footer></app-footer>
  </div>
    
  <div id="app2">
    <app-header></app-header>
    <app-footer></app-footer>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    // 전역 컴포넌트
    Vue.component('app-header', {
      template: '<h1>Header</h1>'
    });

    new Vue({
      el: '#app',
      // 지역 컴포넌트 등록 방식
      components: {
        // '컴포넌트 이름': '컴포넌트 내용'
        'app-footer': {
          template: '<footer>footer</footer>'
        }
      }
    });

    new Vue({
      el: '#app2'
    });
  </script>
</body>
</html>

동작 확인

전역 컴포넌트는 인스턴스를 생성할 때마다 따로 등록할 필요 없지만, 지역 컴포넌트의 경우 인스턴스를 생성할 때마다 등록을 해줘야 한다.

728x90
반응형

'Dev > Vue.js' 카테고리의 다른 글

[Vue.js] 컴포넌트 통신 방법 - 응용  (0) 2020.09.08
[Vue.js] 컴포넌트 통신 방식 - 기본  (0) 2020.09.07
[Vue.js] 인스턴스  (0) 2020.09.07
[Vue.js] Vue와 Reactivity  (0) 2020.09.07
[Vue.js] 강좌 소개 및 환경 설정  (0) 2020.09.07

댓글