v-
를 사용<template>
<h1>{{ a1 }}</h1>
<h2>{{ a2 }}</h2>
<div>{{ a3 }}</div>
</template>
<script>
export default {
name: 'App',
data () {
return {
a1: '문자열1',
a2: '문자열2',
a3: '<h3>문자열3</h3>',
}
},
}
</script>
data를 <template>
에 출력하면 아래와 같이 문자열이 출력된다.
아래 예제와 같이 v-html
을 적용하면 실제 HTML로 출력되는 것을 확인할 수 있다.
<template>
<h1>{{ a1 }}</h1>
<h2>{{ a2 }}</h2>
<div v-html="a3"></div>
</template>
💡 웹사이트에서 HTML을 동적으로 렌더링하면 XSS 취약점이 쉽게 발생할 수 있다. 따라서 신뢰할 수 있는 콘텐츠에서만 사용하고 사용자가 제공한 콘텐츠 등에선 절대 사용하면 안된다.
<div v-bind:id="dynamicId"></div>
<div :id="dynamicId"></div>
id
속성을 컴포넌트의 dynamicId
속성과 동기화된 상태로 유지null
또는 undefined
이면 엘리먼트의 속성이 제거된 상태로 렌더링 된다.v-bind:
는 :
(콜론)으로 줄여 쓸 수 있다. (e.g. :id
)<template>
<!-- 버튼 disabled 상태 -->
<button :disabled="isBtnDisabled">Button</button>
</template>
<script>
export default {
name: 'App',
data () {
return { isBtnDisabled: true };
},
}
</script>
isBtnDisabled
에 truthy
값이 있거나 빈 문자열""
인 경우 disabled
속성 표기falsy
값의 경우 속성 생략v-bind
를 사용하여 단일 엘리먼트에 바인딩<template>
<div v-bind="objectOfAttrs"></div>
</template>
<script>
export default {
name: 'App',
data() {
return {
objectOfAttrs: {
id: 'container',
class: 'wrapper'
}
}
},
}
</script>
@
으로 줄여서 사용 가능 (e.g. @click
)<a v-on:click="doSomething"> ... </a>
<a @click="doSomething"> ... </a>
attributeName
나 변수 eventName
는 자바스크립트 표현식으로 동적으로 사용null
또는 문자열이여야 한다.null
인 경우 : 바인딩을 명시적으로 제거<!-- 1. v-bind -->
<a v-bind:[attributeName]="url"> ... </a>
<!-- 단축 문법 -->
<a :[attributeName]="url"> ... </a>
<!-- 2. v-on -->
<a v-on:[eventName]="doSomething"> ... </a>
<!-- 단축 문법 -->
<a @[eventName]="doSomething">
❗️ 동적인 인자 문법 제약 조건
<a :['foo' + bar]="value"> ... </a>
<!-- v-bind:[someattr]로 변환되고, 인스턴스에 "someattr" 속성이 없는 경우, 이 코드는 동작하지 않습니다. -->
<a v-bind:[someAttr]="value"> ... </a>
.
)으로 시작하며 디렉티브가 특별한 방식으로 바인딩되어야 함을 나타낸다..prevent
수식어가 트리거된 이벤트에서 event.preventDefault()
를 호출하도록 v-on
디렉티브에 지시한다.<form @submit.prevent="onSubmit">...</form>