뷰 템플릿은 HTML, CSS 등의 마크업 속성과 뷰 인스턴스에 정의한 데이터 및 로직들을 연결하여 사용자가 브라우저에서 볼 수 있는 형태의 HTML로 변환해 주는 속성입니다.
사용자가 볼 수 없지만, 라이브러리 내부적으로 Template 속성에서 정의한 마크업 + 뷰 데이터를 가상 돔 기반의 render() 함수로 변환합니다.
데이터 바인딩
HTML 화면 요소를 뷰 인스턴스의 데이터와 연결하는 것을 의미합니다.
{{ }} 방식
이전 글에서 자주 봤던 방식입니다.
{{ message }} 를 이용하여 script 내의 data와 연결하여 사용했습니다.
message 값을 바꾸면 Vue 반응성에 의해 화면이 자동적으로 갱신됩니다.
만약 Vue 데이터가 변경 되어도 값을 바꾸고 싶지 않으면 v-once 속성을 사용하시면 됩니다.
ex) <div id = "app" v-once> {{ message }} </div>
v-bind 방식
아이디, 클래스, 스타일 등의 HTML 속성 값에 Vue 데이터 값을 연결할 때 사용하는 데이터 연결 방식입니다.
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<meta name ="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue Sample</title>
</head>
<body>
<div id="app">
<p v-bind:id="ID">ID Binding</p>
<p v-bind:class="LEVEL">Level Binding</p>
<p v-bind:style="COLOR">Color Binding</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="http://unpkg.com/vue-router@3.0.1/dist/vue-router.js"></script>
<script>
new Vue({
el: '#app',
data: {
ID: 'container',
LEVEL: 5,
COLOR: 'color: blue'
}
});
</script>
</body>
</html>
id와 class, style의 앞에 v-bind를 붙여 Vue 인스턴스에 정의한 속성과 연결하여 화면에 표시합니다.
데이터 속성의 값들이 화면 요소에 연결되어 나타난 것을 확인할 수 있습니다.
※ v-bind: 문법을 :로 간소화할 수 있습니다.
Vue 디렉티브
HTML 태그 안에 v- 접두사를 가진 모든 속성을 의미합니다.
화면의 요소를 더 쉽게 조작하기 위해 사용하는 기능입니다.
Vue의 데이터 값이 변경되었을 때 화면의 요소들이 Reactive하게 반응하여 변경된 데이터 값에 따라 갱신됩니다.
v-if |
지정한 Vue 데이터 값의 참, 거짓 여부에 따라 해당 HTML 태그를 화면에 표시하거나 하지 않습니다. |
v-for |
지정한 뷰 데이터 개수만큼 해당 HTML 태그를 반복 출력합니다. |
v-show |
데이터의 진위 여부에 따라 해당 HTML 태그를 화면에 표시하거나 표시하지 않습니다. |
v-bind |
HTML 태그의 기본 속성과 Vue 데이터 속성을 연결합니다. |
v-on |
화면 요소의 이벤트를 감지하여 처리할 때 사용합니다. |
v-model |
Form에 입력한 값을 Vue 인스턴스 데이터와 즉시 동기화합니다. |
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<meta name ="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue Sample</title>
</head>
<body>
<div id="app">
<a v-if="flag">True Vue.js</a>
<ul>
<li v-for="num in IOS">{{ num }}</li>
</ul>
<p v-show="flag">check</p>
<h4 v-bind:id="check_id">Test vue</h4>
<button v-on:click="Alert">Alert</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="http://unpkg.com/vue-router@3.0.1/dist/vue-router.js"></script>
<script>
new Vue({
el: '#app',
data: {
flag: true,
IOS: ['Macbook', 'AppleWatch', 'Iphone'],
check_id: 10
},
methods: {
Alert: function() {
return alert('check alert');
}
}
});
</script>
</body>
</html>
· v-if : flag 값이 true이기에 표시됩니다.
· v-for : Vue 데이터 IOS 값 모두 출력합니다.
· v-show : flag 값이 true이기에 표시됩니다.
· v-bind : check_id 속성을 연결합니다.
· v-on : 경고 창을 출력합니다.
해당 코드 실행 결과 화면입니다.
경고 창을 좀 더 자세히 알아봅시다.
...
<body>
<div id="app">
<button v-on:click="Alert(5)">Alert</button>
</div>
...
<script>
new Vue({
el: '#app',
methods: {
Alert: function(num) {
return alert('check alert ' + num);
}
}
});
...
이와 같이 인자를 받아 경고 창 메세지를 생성할 수 있습니다.
고급 Template 기법
실재 애플리케이션을 개발할 때 유용한 속성입니다.
computed 속성
복잡한 데이터 연산들을 정의하는 영역입니다.
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<meta name ="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue Sample</title>
</head>
<body>
<div id="app">
<p> {{ reverse_message }} </p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="http://unpkg.com/vue-router@3.0.1/dist/vue-router.js"></script>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello! Kimn!'
},
computed: {
reverse_message: function() {
return this.message.split('').reverse().join('');
}
}
});
</script>
</body>
</html>
위와 같이 해당 함수를 computed 속성에 정의하면 HTML 코드를 잘 정돈되어 작성할 수 있습니다.
watch 속성
데이터 변화를 감지하영 자동으로 특정 로직을 수행합니다.
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<meta name ="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue Sample</title>
</head>
<body>
<div id="app">
<p> <input v-model="message"> </p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="http://unpkg.com/vue-router@3.0.1/dist/vue-router.js"></script>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello! Kimn!'
},
watch: {
message: function(data) {
console.log("Change message : ", data);
}
}
});
</script>
</body>
</html>
Input Box의 입력 값을 v-model 디렉티브로 연결하여 입력 값이 변화가 있을 때 console에 값을 출력합니다.
'Develop > Vue' 카테고리의 다른 글
Vue 애플리케이션 만들기 (0) | 2020.01.26 |
---|---|
Vue 프로젝트 구성 (0) | 2020.01.26 |
Vue HTTP 통신 (0) | 2020.01.26 |
Vue Router (0) | 2020.01.26 |
Vue 컴포넌트 (0) | 2020.01.26 |