vue.js를 사용할 때 의식해야 하는 것은, 화면을 렌더링하는 구조자체는 DOM이 아니라 자바스크립트 데이터 라는 것이다. DOM이 먼저 존재하고, 이것을 읽어들인 후에 조작하는게 아니라, 데이터가 먼저 존재하고 이 데이터를 기반으로 적절한 DOM을 구축한다.
입력양식과 동기화하기
-> 데이터와 input양식 입력 항목을 바인딩할 때는 v-model을 사용한다.
-> v-model을 사용하면 바로 데이터와 DOM에 반영된다.
-> 기본적으로 문자열을 입력값으로 받지만 v-model.number를 이용하면 입력값을 숫자로도 받을 수 있다.
기본적인 옵션 구성
var app = new Vue({
// 1) 마운트할 요호
el : '#app',
// 2) 사용할 데이터
data: {
message: 'Hello Vue.js'
},
// 4) 산출 속성
computed: {
computedMessage: function() {
return this.messsage + '!'
}
},
// 5) 라이프사이클 훅
created : function() {
//하고싶은 처리
},
// 6) 애플리케이션에서 사용할 메서드
method: {
myMethod: function() {
//하고싶은 처리
}
}
})
data에 정의한 값을 렌더링할때는 이중괄호로 감싸 템플리에 입력한다. Mustache기법이라고도 한다.
<div id=app>
<p>{{ message }}</p>
</div>
-> Mustache는 텍스트 콘텐츠를 위한 기법으로 엘리먼트의 속성으로 사용할 때는 적용할 수 없다. 속성에 바인딩하려면 v-bind를 사용해야 한다.
// X
<input value="{{message }}"></input>
// O
<input v-bind:value=message"></input>
method 내부에서 data또는 다른 메서드에 접근하기
-> template내부에서는 속성이름만으로 사용할 수 있지만, method내부에서는 this를 붙여야한다.
-> this는 인스턴스를 말하며 new Vue()인스턴스의 리턴 값을 나타낸다. 만약 인스턴스가 컴포넌트라면, this는 컴포넌트 인스턴스 자체를 나타낸다.
조건 분기 : 조건이 true일때만 요소를 출력하게 해준다.
v-if, v-else-if, v-else디렉티브를 조합해서 그룹으로 만들면 여러개의 조건을 지정할 수 있다. v-if, v-else-if, v-else와 같이 디렉티브 내부에 있는 엘리먼트의 경우 속성의 상태가 남거나 트랜지션이 일어나지 않는 등 예상하지 못한 문제가 발생할 수도 있다. 이러한 경우 각각의 요소에 유니크한 key를 설정해 문제를 해결할 수 있다.
반복해서 렌더링하고 싶을 땐 v-for디렉티브 사용한다.
<ul>
<li v-for="item in list" :key="item.id">...</li>
<li v-for="item in list" :key="item.id">...</li>
</ul>
DOM을 직접 참조하는 $el와 $refs