본문 바로가기

Frontend

Vue.js (3) 인스턴스와 컴포넌트

1. 뷰 인스턴스

뷰 인스턴스는 뷰를 사용하기 위한 가장 기본 단위

뷰 컴포넌트가 레고 블럭이라면, 뷰 인스턴스는 레고 판 이라고 생각하면 된다.

 

A. 뷰 인스턴스 옵션 속성

el: 뷰 인스턴스를 마운트 할 태그 아이디

data: 뷰 인스턴스에서 다룰 데이터

template: 뷰 인스턴스 HTML 형태

methods: 뷰 인스턴스 메서드

created: 뷰 인스턴스 라이프사이클 훅(생성 직후)

 

B. 뷰 인스턴스 유효 범위

el 속성으로 지정한 태그 한정

 

C. 뷰 인스턴스 라이프 사이클

- beforeCreate

인스턴스 생성(new Vue())

- created

- beforeMount

인스턴스 부착

- mounted

(beforeUpdate)

(인스턴스 내용 갱신)

(updated)

beforeDestroy

인스턴스 소멸

destroyed

 

D. 예제 소스

<!DOCTYPE html>
<html>
  <head>
    <title></title>
  </head>
  <body>
    <div id="app">
      {{ message }}
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
    <script>
      new Vue({
        el: '#app',
        data: {
          message: 'Hello Vue.js!'
        },
        beforeCreate: function() {
          console.log("beforeCreate")
        },
        created: function() {
          console.log("created");
        },
        mounted: function() {
          console.log("mounted");
          this.message = 'Hello modified Vue!'
        },
        beforeUpdate: function() {
          console.log("beforeUpdate");
        },
        updated: function() {
          console.log("updated");
        }
      })
    </script>
  </body>
</html>

 

E. 결과 화면(콘솔 로그)

 

 

 

 

2. 뷰 컴포넌트

뷰 컴포넌트 레고 블럭으로 비유된다.

화면을 모듈화 하여 중복 코딩을 방지하고, 화면 소스 구조의 일관성을 높일 수 있다.

 

A. 뷰 컴포넌트의 유효 범위

전역 컴포넌트는 모든 인스턴스에 적용 가능하다.

지역 컴포넌트는 components 속성으로 등록 된 인스턴스에만 적용 된다.

 

B. 전역 컴포넌트 로딩 순서

- 라이브러리 로딩 → 전역 컴포넌트 등록(Vue.component()) → 인스턴스 객체 생성

- 인스턴스 부착 → 인스턴스 내용 변환 + 컴포넌트 내용 변환

 

C. 예제 소스

<!DOCTYPE html>
<html>
  <head>
    <title>Vue Component</title>
  </head>
  <body>
    <div id="app">
      <h3>첫 번째 인스턴스</h3>
      <global-component></global-component>
      <local-component></local-component>
    </div>
    <hr>
    <div id="app2">
      <h3>두 번째 인스턴스</h3>
      <global-component></global-component>
      <local-component></local-component>
    </div>

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

      var cmp = {
        template: '<div>지역 컴포넌트</div>'
      }

      new Vue({
        el: '#app'
      });

      new Vue({
        el: '#app2',
        components: {
          'local-component': cmp
        }
      })
    </script>
  </body>
</html>

 

D. 결과 화면

 

 

'Frontend' 카테고리의 다른 글

Vue.js (5) 라우터  (0) 2020.04.21
Vue.js (4) 컴포넌트 간 통신  (0) 2020.04.11
Vue.js (2) 환경구축  (0) 2020.04.11
Vue.js (1) 시작  (0) 2020.04.08
Javascript로 외부 html 가공하기(feat. DOMParser)  (0) 2020.03.29