Web/Vue.js

Vue instance

yunae 2022. 11. 1. 21:34

MVVM Pattern

: 마크업 언어로 구현하는 GUI의 개발을 Back-end 로부터 분리시켜 view가 어느 특정한 모델 플랫폼에 종속되지 않도록 함

 

  • View : 우리 눈에 보이는 부분 = DOM
  • Model : 실제 데이터 = JSON
  • View Model (Vue) 

"서로가 서로를 모름 == 독립성 증가, 적은 의존성"

 

 

 

 

View Model

- View를 위한 Model

- View와 연결되어 Action을 주고받음

- Model이 변경되면 View Model도 변경되고 바인딩된  View도 변경됨

- View에서 사용자가 데이터를 변경하면  View Model의 데이터가 변경되고 바인딩된 다른 View도 변경됨

 

 

View Instance === 1개의 객체

-> 아주 많은 속성과 메서드를 이미 가지고 있고, 이러한 기능들을 사용하는 것

 

 

 

 

Vue Instance 생성

모든 Vue 앱은 Vue 함수로 새 Vue 인스턴스를 만들고 시작

<script>
   const app = new Vue({
   		// 옵션
   })
</script>

-> Vue 인스턴스를 생성할 때는 Options 객체를 전달해야 함

 

[참고] 생성자 함수

동일한 구조의 객체를 여러개 만들고 싶다면? -> new 연산자 사용

// 함수 이름은 반드시 대문자로 시작
function Person(name, age, phone) {
  this.name = name
  this.age = age
  this.phone = phone
}

// 생성자 함수를 사용할 때는 반드시 new 연산자를 사용
const 조승우 = new Person('승우', 42, 010-1234-5678)

 

 

 

 

Options : el ( element )

: Vue instance와 DOM을 연결(mount)하는 옵션

- View와 Model을 연결하는 역할, HTML id 혹은 class와 마운트 가능

 

=> Vue instance와 연결되지 않은 DOM 외부는 Vue의 영향을 받지 않음 (속성 및 메서드 사용 불가)

<div id="app"><div>

<script>
   const app = new Vue({
       el: '#app'
   })
</script>

 

 

 

Options : data

 

: Vue instance의 데이터 객체 혹은 인스턴스 속성

  • 객체 또는 함수의 형태로 작성
  • 컴포넌트를 정의할 때 data는 데이터를 반환하는 함수로 선언
  • 화살표 함수 사용 X
<div id="app">
  <h2> {{ msg }} </h2>
<div>

<script>
   const app = new Vue({
       el: '#app',
       data: {
         msg: 'Hello'
       }
   })
</script>

 

 

 

 

Options : methods

: Vue instance에 추가할 메소드

  • 화살표 함수 사용 X
  • 모든 메소드는 자동으로 this 컨텍스트를  Vue 인스턴스에 바인딩 함
<div id="app">
  <h2> {{ count }} </h2>
<div>

<script>
   const app = new Vue({
       el: '#app',
       data: {
         count: 1
       },
       methods: {
         plus: function() {
           this.count++;
         }
       }
   })
</script>

 

 

 

Options : template

: Vue 인스턴스의 마크업으로 사용할 문자열 템플릿

  • template은 마운트된 엘리먼트를 대체함
  • Vue 옵션에 render 함수가 있으면 템플릿 속성은 무시