FrontEnd/Vue

[Vue.js] 컴포넌트 등록

Raconer 2023. 4. 15. 20:15
728x90

참고 문서

do it vue.js

컴포넌트란?

조합하여 화면을 구성할 수 있는 블록(화면의 특정영역)을 의미한다.

특징

  • 컴퓨넌트를 활용하면 화면을 빠르게 구조화 하여 일괄적인 패턴으로 개발 할 수 있다.
  • 쪼개서 사용하므로 재사용이 쉽다.
  • 남이 작성한 코드를 직관적으로 이해 할 수있다.

컴포넌트를 이해 하기 위하 예제 구조 설명

뷰 에서는 웹화면을 구성할 때 흔히 사용하는 네비게이션바, 테이블, 리스트, 인풋 박스 등과 같은 화면 구성 요소들을 잘게 쪼개어 컴포넌트로 관리 합니다.

Tree 형식으로 구조화 되어 있다.

  • Root
    • Header
    • Content
      • Aside
      • List
    • Footer

컴포넌트 등록

  • 전역(global))
    • 여러 인스턴스에서 공통으로 사용한다.
    • 뷰로 접근 가능한 모든 범위에서 사용할수있다.
  • 지역(local)
    • 특정 인스턴스에서만 유효한 범위를 갖는다.

1. 전역 컴포넌트 등록

전역 컴포넌트는 뷰 라이브러리를 로딩하고 나면 접근 가능한 Vue변수를 이용하여 등록한다.
전역 컴포넌트를 모든 인스턴스에 등록하려면 Vue생성자에서 .Component()를 호출 하여 수행하면된다.

Vue.compoent("컴포넌트 이름", { // 컴포넌트 내용 });
  1. 컴포넌트 이름
    • template 속성에서 사용할 HTML사용자 정의 태그(custom tag)이름을의 이름을 의미한다.
    • 태그 이름의 명명 규칙은 HTML 사용자 정의 태그 스펙에서 강제 하는 '모든 소문자', '케밥 기법'을 따르지 않아도 된다.
      • 케밥 기법 : 변수가 단어의 조합으로 이루어져 있을때, 단어와 단어 사이를 -로 잇는 변수 명명 방식
    • 실제 화면의 HTML 요소로 변환 될때 표시될 속성들을 컴포넌트 내용에 작성한다.
      • 컴포넌트 내용에는 template,data, methods등 인스턴스 옵션 속성을 정의 할수있다.

예제

<!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" />
    <title>Vue life Cycle</title>
  </head>
  <body>
    <div id="app">
      <button>컴포넌트 등록</button>
      <!-- 전역 컴포넌트 표시 -->
      <my-component></my-component>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
    <script>
      // 전역 컴포넌트 등록
      Vue.component("my-component", {
        template: "<div>전역 컴포넌트가 등록되었습니다.</div>",
      });
      new Vue({
        el: "#app",
      });
    </script>
  </body>
</html>

컴포넌트 처리 과정

  1. 뷰 라이브러리 파일 로딩
  2. 뷰 생성자로 컴포넌트 등록
    • Vue.component()
  3. 인스턴스 객체 생성(옵션 속성 포함)
  4. 특정 화면 요소에 인스턴스 부착
  5. 인스턴스 내용변환
    • 등록된 컴포넌트 내용도 변환
    • my-component -> div로 변환 한다.
  6. 변환된 화면 요소를 사용자가 최종확인

2. 지역 컴포넌트 등록

지역 컴포넌트 등록은 전역 컴포넌트 등록과는 다르게 인스턴스에 components속성을 추가하고 등록할 컴포넌트 이름과 내용을 정의 하면된다.

new Vue({ componets: { '컴포넌트 이름': 컴포넌트 내용 } })

<body>
  <div id="app">
    <button>컴포넌트 등록</button>
    <!-- 전역 컴포넌트 표시 -->
    <my-local-component></my-local-component>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
  <script>
    var cmp = {
      // 컴포넌트 내용
      template: "<div>지역 컴포넌트가 등록되었습니다.!</div>",
    };
    new Vue({
      el: "#app",
      components: {
        "my-local-component": cmp,
      },
    });
  </script>
</body>

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

<body>
  <div id="app">
    <h3>첫 번째 인스턴스 영역</h3>
    <my-global-component></my-global-component>
    <my-local-component></my-local-component>
  </div>
  <div id="app2">
    <h3>두 번째 인스턴스 영역</h3>
    <my-global-component></my-global-component>
    <my-local-component></my-local-component>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
  <script>
    // 전역 컴포넌트 등록
    Vue.component("my-global-component", {
      template: "<div>전역 컴포넌트 입니다.</div>",
    });

    // 지역 컴포넌트 등록
    var cmp = {
      template: "<div>지역 컴포넌트입니다.</div>",
    };

    // 첫번째 인스턴스
    new Vue({
      el: "#app",
      // 지역 컴포넌트 등록
      components: {
        "my-local-component": cmp,
      },
    });

    // 두번째 인스턴스
    new Vue({
      el: "#app2",
    });
  </script>
</body>
728x90

'FrontEnd > Vue' 카테고리의 다른 글

Vue.js Module  (0) 2023.04.15
Vue.js 프로젝트 생성  (0) 2023.04.15
[Vue.js] Router 기초  (0) 2023.04.15
Vue.js란?  (0) 2023.04.15
Vue.js + spring 프로젝트 생성  (0) 2023.04.15