CDN
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<div id="app">{{message}}</div>
{{ }}
사용{{ message.split('').reverse().join('') }}
<html>
<!-- 2. 선언적 렌더링 -->
<h2>선언적 렌더링</h2>
<div id="app">{{message}}</div> <!-- 안녕하세요 -->
<!-- 1. Vue CDN -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
// 2. 선언적 렌더링
var app = new Vue({
el : '#app',
data : {
message : "안녕하세요"
}
})
</script>
</html>
v-접두사가 있는 특수속성
속성값은 단일 JS표현식이 됨(v-for 제외)
표현식 값이 변경될 때 반응적으로 DOM에 적용하는 역할을 함
전달인자(Arguments)
:
(콜론)을 통해 전달인자를 받을 수도 있음수식어( Modifiers)
.
(점)으로 표시되는 특수 접미사.stop
.prevent
.capture
self
.once
.passive
<!-- 클릭 이벤트 전파가 중단됩니다 -->
<a v-on:click.stop="doThis"></a>
<!-- 제출 이벤트가 페이지를 다시 로드 하지 않습니다 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 수식어는 체이닝 가능합니다 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 단순히 수식어만 사용할 수 있습니다 -->
<form v-on:submit.prevent></form>
<!-- 이벤트 리스너를 추가할 때 캡처모드를 사용합니다 -->
<!-- 즉, 내부 엘리먼트를 대상으로 하는 이벤트가 해당 엘리먼트에서 처리되기 전에 여기서 처리합니다. -->
<div v-on:click.capture="doThis">...</div>
<!-- event.target이 엘리먼트 자체인 경우에만 트리거를 처리합니다 -->
<!-- 자식 엘리먼트에서는 안됩니다 -->
<div v-on:click.self="doThat">...</div>
<!-- 2개가 동일 함 -->
<p v-text ="message"></p>
<p>{{ message }}</p>
item in items
구문을 사용@
v-on:click
-> @click
:
(콜론)v-bind:href
-> :href
.lazy
.number
.trim
필터는 자바스크립트 표현식 마지막에 “파이프(|)”심볼과 함께 추가하여 사용
중괄호 보간법, v-bind 표현에서만 사용이 가능
중괄호 보간법
{{ message | capitalize }}
v-bind 표현
<div v-bind:id="rawId | filterId"></div>
beforeCreate
, created
, beforeMount
, mounted
, beforeUpdate
, updated
, beforeDestroy
, destroyed
가 있음this.$el
에 접근할 수 없습니다. data, methods
에도 접근할 수 없습니다.var app = new Vue({
el: '#app',
data() {
return {
msg: 'hello';
}
},
beforeCreate(function() {
console.log(this.msg); // undefined
})
})
data
를 반응형으로 추적할 수 있게 되며 computed, methods, watch
등이 활성화되어 접근이 가능하게 됩니다data
에 직접 접근이 가능하기 때문에, 컴포넌트 초기에 외부에서 받아온 값들로 data
를 세팅해야 하거나 이벤트 리스너를 선언해야 한다면 이 단계에서 하는 것이 가장 적절var app = new Vue({
el: '#app',
data() {
return {
msg: 'hello';
}
},
created(function() {
console.log(this.msg); // hello
})
})
var app = new Vue({
el: '#app',
beforeMount(function() {
console.log('beforeMount');
})
})
this.$el
을 비롯한 data, computed, methods, watch
등 모든 요소에 접근이 가능this.$nextTick
을 이용한다면, 모든 화면이 렌더링 된 이후에 실행되므로 마운트 상태를 보장할 수 있습니다.var app = new Vue({
el: '#app',
mounted(function() {
this.$nextTick(function() {
// 모든 화면이 렌더링된 후 실행합니다.
})
})
})
data
의 값이 변해서, DOM에도 그 변화를 적용시켜야 할 때 변화 직전에 호출var app = new Vue({
el: '#app',
beforeUpdate(function() {
console.log('beforeUpdate');
})
})
data
를 변경하는 것은 무한 루프를 일으킬 수 있으므로 이 훅에서는 데이터를 직접 바꾸어서는 안됩니다.this.$nextTick
을 이용해, 모든 화면이 업데이트 된 이후의 상태를 보장할 수 있습니다.var app = new Vue({
el: '#app',
updated(function() {
console.log('Update');
})
})
var app = new Vue({
el: '#app',
beforeDestroy(function() {
console.log('beforeDestroy');
})
})
var app = new Vue({
el: '#app',
destroyed(function() {
console.log('destroyed');
})
})