Vue.js는 렌더링 된 DOM을 기본 Vue 인스턴스의 데이터에 선언적으로 바인딩 할 수 있는 HTML 기반 템플릿 구문 사용
보간법(Interpolation)
디렉티브(Directive)
데이터 바인딩의 가장 기본 형태 "Mustache" 구문 (이중 중괄호)을 사용한 텍스트 보간
<span> 메시지 : {{msg}} </span>
Mustache 태그는 데이터 객체의 msg 속성 값으로 대체 (해당 값이 변경되면 갱신)
v-once 디렉티브를 사용하여 데이터 변경 시 업데이트 되지 않는 일회성 보간 수행
<span v-once> 다시는 변경하지 않습니다: {{msg}}</span>
이중 중괄호는 HTML이 아닌 일반 텍스트로 해석
실제 HTML을 출력하기 위해서는 v-html 디렉티브 사용
<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>
{{number+1}}
{{ok ? 'YES' : 'NO'}}
<!-- 글 뒤집기 -->
{{message.split('').reverse().join('')}}
<div v-bind:id="'list-' + id"></div>
<!-- 아래는 구문입니다, 표현식이 아닙니다. -->
{{var a = 1}}
<!-- 조건문은 작동하지 않습니다. 삼항 연산자를 사용하세요 -->
{{if(ok) {return message}}}
v- 접두사가 있는 특수 속성
속성값은 단일 JS 표현식이 됨 (v-for 예외)
역할은 표현식의 값이 변경될 때 사이드 이펙트를 반응적으로 DOM에 적용
v-text
v-html
v-show
v-if
v-else
v-else-if
v-for
v-on
v-bind
v-model
v-slot
v-pre
v-cloak
v-once
엘리먼트의 textContent를 업데이트
일부를 갱신해야 한다면 {{ }} 사용
<span v-text="msg"></span>
<!-- 같습니다 -->
<span>{{msg}}</span>
HTML 요소의 속성에 Vue 상태 데이터를 값으로 할당
Object 형태로 사용하면 value가 true인 key가 class 바인딩 값으로 할당
약어 제공 :
v-bind:href === :href
<a v-bind:href="url">...</a>
HTML form 요소의 input 엘리먼트 또는 컴포넌트에 양방향 바인딩 처리
수식어
form 엘리먼트 초기 'value'와 'checked', 'selected' 속성 무시
조건에 따라 엘리먼트를 화면에 표시
항상 렌더링되고 DOM에 남아있음
단순히 엘리먼트에 display CSS 속성을 토글하는 것
조건이 바뀌면 트랜지션 호출
<h1 v-show='ok'>Hello!</h1>
표현식 값의 참 거짓을 기반으로 엘리먼트를 조건부 렌더링
엘리먼트 및 포함된 디렉티브/컴포넌트는 토글하는 동안 삭제되고 다시 작성됨
<template> 엘리먼트를 이용하여 v-if 사용 가능, 최종 결과에는 template 엘리먼트는 포함 X
<span v-if="age < 10">무료</span>
<span v-else-if="age < 20">7000원</span>
<span v-else-if-"age < 65">10000원</span>
<span v-else>3000원</span>
원본 데이터를 기반으로 엘리먼트 또는 템플릿 블록을 여러 번 렌더링
디렉티브의 값은 반복되는 현재 엘리먼트에 대한 별칭을 제공하기 위해 alias in expression을 사용
<div v-for = "item in items">
{{item.text}}
</div>
<div v-for="(item, index) in items"></div>
<div v-for="(val, key) in object"></div>
<div v-for="(val, name, index) in object"></div>
<div v-for="item in items" : key="item.id">
{{item.text}}
</div>
엘리먼트에 이벤트 리스너 연결
이벤트 유형은 전달인자로 표시
약어 제공 @
v-on:click === @click
<div id="example-1">
<button v-on:click="counter+=1">Add 1</button>
<p>위 버튼을 클릭한 횟수는 {{counter}} 번 입니다.</p>
</div>
Vue Instance가 준비될 때 까지 Mustache 바인딩을 숨기는 데 사용
[v-clock]{display: none}과 같은 CSS 규칙과 함께 사용
Vue Instance가 준비되면 v-cloak는 제거됨
Vue Instance는 생성 관련된 데이터(data) 및 메서드의 정의 가능
method 안에 data를 this.데이터이름 으로 접근
<div id = "app">
<button @click="greet">인사</button>
</div>
<script>
new Vue({
el: '#app',
data() {
return { name: "Yang"}
},
methods: {
greet() {
// 메소드 안에서 사용하는 this는 Vue 인스턴스를 가리킨다.
alert(`Hello ${this.name} !`)
}
}
});
</script>
Vue는 텍스트 형식화를 적용할 수 있는 필터를 지원
filter를 이용하여 표현식에 새로운 결과 형식을 적용
{{Mustache}} 구문(이중 중괄호) 또는 v-bind 속성에서 사용 가능
자바스크립트 표현식 마지막에 "|" 심볼과 함께 추가 되어야 함.
필터는 체이닝 가능
<!-- 중괄호 보간법 -->
{{ message | capitalize }}
<!-- v-bind 표현 -->
<div v-bind:id="rawId | formatId"></div>
Vue.filter(
'count', (val) => {
if(val.length == 0) {
return;
}
return `${val} : ${val.length}자`;
}
);
new Vue({
el: '#app',
filters: {
count(val) {
return `${val} : ${val.length}자`;
}
}
});
특정 데이터의 변경사항을 실시간으로 처리 가능
캐싱을 이용하여 데이터의 변경이 없을 경우 캐싱된 데이터를 반환
Setter, Getter를 직접 지정 가능
작성은 method 형태로 정의하지만 Vue에서 프록시 처리하여 property처럼 사용
화살표 함수 사용 X
<div id="app">
<p>원본 메시지: "{{message}}"</p>
<p>{{reverseMessage}}"</p>
</div>
var vm = new Vue({
el: '#app',
data: {
message: '안녕하세요'
},
computed: {
reversedMessage: function() {
return this.message.split('').reverse().join('')
}
}
});
computed 속성 대신 methods에 함수 정의하여 사용 가능 (최종 결과는 같음)
computed 속성은 종속 대상을 계산하여 저장해 놓는다. (캐싱)
Vue Instance의 특정 property가 변경될 때 실행할 callback 함수 설정
데이터를 감시
화살표 함수 사용 X
<div id="app">
<p>원본 메시지 : "{{message}}"</p>
<p>{{reversedMessage}}"</p>
<input type="text" v-model="message">
</div>
var vm = new Vue({
el:'#app',
data: {
message: 'Hello',
reversedMessage: ''
},
watch: {
message: function(newVal, oldVal) {
this.reversedMessage = newVal.split('').reverse().join('');
}
},
});