vue.js/vue.js 2

5. 인스턴스 옵션과 속성 | 인스턴스와 컴포넌트 | 뷰 컴포넌트란?

DEV-Front 2022. 7. 5. 20:27
반응형

<인스턴스의 옵션과 속성>

생성자함수로 재사용 할수 있는 옵션과 속성

옵션들은 다음과 같다 ↓

 

객체는 key, value 형태로 들어오는게 중요하다.

  new Vue({
          el: ,
          template: ,
          data:,
          methods: ,
          created: ,
          watch: ,
        });

el: 인스턴스가 그려지는 화면의 시작점 (특징 HTML 태그)

template: 화면에 표시할 요소 (HTML, CSS등)

data: 뷰의 반응성 (Reactivity) 가 반영된 데이터 속성

methods: 화면의 동작과 이벤트 로직을 제어하는 메서드

created: 뷰의 라이프 사이클과 관련된 속성

watch: data에서 정의한 속성이 변화했을 때 추가 동작을 수행할수 있게 정의


<!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">
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <title>Document</title>
</head>
<body>

  <div id="app"></div>

  <script>    
  //options라는 객체를 정의
    var options = {
      el: '#app',
      data:{
        message: 'hi'
      },
      methods:{
      },
    }
    
    var vm = new Vue(options);
  </script>

</body>
</html>

 

위의 코드를 객체 리터럴 ↓ (객체 정의 형식 변경)

<!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">
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <title>Document</title>
</head>
<body>

  <div id="app"></div>

  <script>
     //var options =
    var vm = new Vue({
      el: '#app',
      data: {
        message: "안녕"
      },
      methods: {
      },
      created: function () {        
      },      
    });
  </script>
</body>
</html>

<뷰 컴포넌트>

컴포넌트는 화면의 영역을 구분하여 개발할 수 있는 뷰의 기능이다.

컴포넌트 기반으로 화면을 개발하게 되면 재사용성이 올라가고 빠르게 화면을 제작할 수 있다.

 

화면의 영역을 구분하여 개발하는것. 이라고 이해하면 좋다.

영역을 구분했을때 컴포넌트간의 관계가 생긴다.

 

인스턴스를 생성하면 root 컴포넌트가 된다.

root가 상위 컴포넌트, 컴포넌트가 하위 컴포넌트

 

 

<!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">
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <title>Document</title>
</head>
<body>

  <div id="app">
    <app-header></app-header>
    <app-content></app-content>
    <app-footer></app-footer>
  </div>

  <script>
    //전역 컴포넌트
    Vue.component('app-header', {
      template: '<h1>header</h1>'     
    });

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

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

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