본문 바로가기
개발/Vue.js

03. Vue.js 개발 필수단위 - 인스턴스&컴포넌트

by 개자이너 2019. 8. 26.
반응형

뷰 인스턴스


01. 뷰 인스턴스의 정의와 속성

02. 뷰 인스턴스 옵션 속성

03. 뷰 인스턴스의 우효 범위

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


01. 뷰 인스턴스의 정의와 속성

 

* 뷰 인스턴스 : 뷰로 화면을 개발하기 위해 필수적으로 생성해야 하는 기본 단위

new Vue({
  ...
});

* 뷰 인스턴스 생성자 : 객체를 새로 생성할 때 자주 사용하는 옵션과 기능들을 미리 특정 객체에 저장해 놓고, 새로 객체를 생성할 때 기존에 포함된 기능과 더 불어 기존 기능을 쉽게 확장하여 사용하는 기법이다. (Vue)

뷰로 개발할 때 필요한 기능들을 생성자에 미리 정의해 놓고 사용자가 그 기능을 재정의하여 편리하게 사용하도록 하기 위해 사용한다.

 

 

02. 뷰 인스턴스 옵션 속성

 

* 뷰 인스턴스 속성 : 뷰 인스턴스를 생성할 때 재정의할 data, el, template등의 속성

  • el : 뷰로 만든 화면이 그려지는 시작점

html의 id

<div id="app">
 {{ message }}
</div>

인스턴스의 el 속성

new Vue({
 el:"#app",
});

css선택자 중 #은 해당 아이디를 가진 돔요소와 같다.

  • template : 화면에 표시할 HTML, CSS등의 마크업 요소를 정의하는 속성. 뷰의 데이터 및 기타 속성들도 함께 화면에 그릴 수 있다.
  • methods : 화면 로직 제어와 관계된 메서드를 정의하는 속성. 마우스 클릭 이벤트 처리와 같이 화면의 전반적인 이벤트와 화면 동작과 관련된 로직을 추가할 수 있습니다. 
  • created : 뷰 인스턴스가 생성되자마자 실행할 로직을 정의할 수 있는 속성.

03. 뷰 인스턴스의 우효 범위

 

* 인스턴스의 우효 범위 : 뷰 인스턴스를 생성하면 HTML의 특정 범위 안에서만 옵션 속성들이 적용되어 나타남. el속성과 밀접한 관계가 있음.

 

* 인스턴스가 화면에 적용되는 과정

  1. 뷰 라이브러리 파일로딩
  2. 인스턴스 객체 생성 ( 옵션 속성 포함 )
  3. 특정 화면 요소에 인스턴스를 붙임
  4. 인스턴스 내용이 화면 요소로 변환
  5. 변환된 화면 요소를 사용자가 최종 확인

* 인스턴스 우효 범위 확인 : 

<div id="app">
                ]
 {{ message }} 우효범위
                ]
</div>
new Vue({
 el:"#app",
});

 

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

 

* 라이프 사이클(life cycle) 속성 : 인스턴스의 상태에 따라 호출할 수 있는 속성 / 모바일 앱을 비롯하여 일반적으로 애플리케이션이 가지는 생명 주기

 

인스턴스의 생성, 변경, 소멸 관련 총 8개

  1. beforeCreate : 가장 처음으로 실행되는 라이프 사이클 단계. data 속성과 methods속성이 아직 인스턴스에 정의되어 있지 않고, 돔과 같은 화면요소에 접근할 수 없다.
  2. created : 
  3. beforeMount
  4. mounted
  5. beforeUpdate
  6. updated
  7. beforeDestroy
  8. destroyed

 

* 라이플 사이클 훅(hook) : 각 라이프 사이클 속성에서 실행되는 커스텀 로직 / 개발자가 임의로 작성한 추가 로직

 

 

뷰 컴포넌트


01. 컴포넌트란?

02. 컴포넌트 등록하기

03. 지역 컴포넌트와 전역 컴포넌트의 차이


01. 컴포넌트란?

 

* 컴포넌트 : 조합하여 화면을 구성할 수 있는 블록 (화면의 특정 영역)

화면을 빠르게 구조화하여 일괄적인 패턴으로 개발할 수 있다.

정해진 방식대로 컴포넌트를 등록, 사용하게 되므로 코드 공유가 쉽다.

 

트리 : 컴퓨터 자료구조 중 하나. 노드끼리의 연결이 부모 - 자식의 구조를 따른다. 

 

02. 컴포넌트 등록하기

 

1. 전역컴포넌트 등록하기

전역 컴포넌트는 여러 인스턴스에서 공통으로 사용할 수 있다.

전역컴포넌트 등록 형식

Vue.component('컴포넌트 이름',{
  //컴포넌트 내용
});

* 컴포넌트 이름 : 속성에서 사용할 HTML 사용자 정의태그(custom tag)이름

* 컴포넌트 내용 : 실제 화면의 HTML 요소로 변환될 때 표시될 속성들 ( template, data, methods)등 인스턴스 옵션 속성을 정의할 수 있다.

 

전역컴포넌트 등록하기 예제

 

 

2. 지역컴포넌트 등록하기

하나의 인스턴스에 적용되므로 새 인스턴스를 생성할 때마다 등록해줘야한다.

지역컴포넌트 등록 형식

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

* 컴포넌트 이름 : 속성에서 사용할 HTML 사용자 정의태그(custom tag)이름

* 컴포넌트 내용 : 실제 화면의 HTML 요소로 변환될 때 내용

 

3. 전역컴포넌트와 지역컴포넌트의 차이

...
<div id="app">
    <h3>첫 번째 인스턴스 영역</h3>
    <my-global-component></my-global-component>
    <my-local-component></my-local-component>
</div>
        ...
        <script>
            //전역컴포넌트 등록
            Vue.component('my-global-component',{
            templat: '<div>전역 컴포넌트입니다.</div>'
            });
        //지역 컴포넌트 내용
            var cmp= {
                template: '<div>지역컴포넌트입니다.</div>'
            };
            
            new Vue({
                el: '#app',
                components:{
                    'my-local-component':cmp
                }
            });
        </script>
  ...
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Vue Component Registration</title>
  </head>
  <body>
    <div id="app">
      <header>
        <h3>{{message}}</h3>
        </header>
        <todo-footer></todo-footer>
        <todo-list></todo-list>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
    <script>
      Vue.component('todo-footer',{
        template:'<p>This is another global child component</p>'
      });
      
      var cmp = {
        template:'<p>This is another local child component</p>'
      };

      var app = new Vue({
        el:'#app',
        data:{
          message:'this is a parent component'
        },
        components:{
          'todo-list': cmp
        }
      });


    </script>
  </body>
</html>

뷰 컴포넌트 통신


01. 컴포넌트 간 통신과 우효 범위

02. 상,하위 컴포넌트 관계

03. 상위에서 하위 컴포넌트로 데이터 전달하기

04. 하위에서 상위 컴포넌트로 이벤트 전달하기

05. 같은 레벨의 컴포넌트 간 통신

06. 관계 없는 컴포넌트 간 통신 - 이벤트 버스


01. 컴포넌트 간 통신과 우효 범위

뷰는 컴포넌트로 화면을 구성하므로 같은 웹 페이지라도 데이터를 공유할 수 없다. 왜냐하면 컴포넌트마다 자체적으로 고유한 유효범위를 갖기 때문이다. 각 컴포넌트의 유효범위가 독립적이기 때문에 다른컴포넌트의 값을 직접적으로 참조할 수 가 없다. 

 

02. 상,하위 컴포넌트 관계

그러므로 뷰 프레임워크 자체에서 정의한 컴포넌트 데이터 전달방법을 따라야한다. 

 

*** 상위(부모) - 하위(자식) 컴포넌트

* 상위하위 컴포넌트 간 통신 방식

상위 컴포넌트 --(prop전달)--> 하위 컴포넌트

상위 컴포넌트 <--(이벤트발생)-- 하위 컴포넌트

 

03. 상위에서 하위 컴포넌트로 데이터 전달하기

 

props 속성

상위에서 하위 컴포넌트로 데이터를 전달할 때 사용하는 속성.

 

하위 컴포넌트의 props 속성 정의 방식

Vue.component('child-component',{
  props: ['props 속성 이름'],
});

상위 컴포넌트의 HTML코드 

<child-component v-bind:props 속성 이름="상위 컴포넌트 data 속성"></child-component>
...
<div id="app">
  <child-component v-bind:prosdata="message"></child-component>
</div>
...
<script>
  Vue.component('child-component',{
    props:['propsdata'],
    template: '<p>{{ propsdata }}</p>',
  });
  new Vue({
    el: '#app',
    data: {
      message: 'Hello Vue! passed from Parent Component'
    }
  });
</script>
...

 

04. 하위에서 상위 컴포넌트로 이벤트 전달하기

05. 같은 레벨의 컴포넌트 간 통신

06. 관계 없는 컴포넌트 간 통신 - 이벤트 버스

 

반응형

댓글