VueJS - 바인딩: 초보자 가이드
안녕하세요, 미래의 Vue.js 슈퍼스타 여러분! Vue.js 바인딩의 흥미로운 여정을 안내해 드리게 되어 기쁩니다. 프로그래밍을 가르쳐온 지 오래된 제는 바인딩이 Vue.js를 이렇게 맛있게 만드는 비밀의 소스라고 말씀드릴 수 있습니다. 그럼 손을 놓고 시작해 보겠습니다!
Vue.js에서 바인딩이란?
정밀한 내용에 들어가기 전에 바인딩이 무엇인지 이해해 보겠습니다. Vue.js에서 바인딩은 데이터를 DOM(도큐メント 오브젝트 모델)에 연결하는 방법입니다. 마치 JavaScript 코드와 화면에 나타나는 것 사이에 마법적인 연결을 만드는 것과 같습니다. 멋지죠?
HTML 클래스 바인딩
파티에 입을 옷을 고를 때처럼, 상황에 따라 다른 옷을 고를 수 있습니다. Vue.js에서 HTML 클래스를 바인딩하는 것도 비슷합니다. 데이터에 따라 요소의 외관을 동적으로 변경할 수 있습니다.
기본 클래스 바인딩
간단한 예제를 보겠습니다:
<div id="app">
<p :class="{ active: isActive }">나는 활성화되었나요?</p>
</div>
<script>
new Vue({
el: '#app',
data: {
isActive: true
}
})
</script>
이 예제에서 우리는 isActive
데이터 속성에 따라 'active' 클래스를 문단에 바인딩합니다. isActive
가 참이면 문단에 'active' 클래스가 적용됩니다. 거짓이면 적용되지 않습니다.
여러 클래스
하지만 여러 클래스를 동시에 처리하고 싶다면 어떻게 하나요? 문제 없습니다! Vue.js는 우리를 위한 해결책을 가지고 있습니다:
<div id="app">
<p :class="{ active: isActive, 'text-danger': hasError }">
다중 클래스 바인딩
</p>
</div>
<script>
new Vue({
el: '#app',
data: {
isActive: true,
hasError: false
}
})
</script>
여기서 우리는 'active'과 'text-danger' 두 가지 클래스를 바인딩합니다. 문단은 'active' 클래스를 가지지만, hasError
를 참으로 변경하지 않는 한 'text-danger' 클래스는 적용되지 않습니다.
배열 문법
우리는 배열을 사용하여 클래스를 바인딩할 수도 있습니다. 마치 옷장에 여러 가지 옷을 가지고 있는 것처럼:
<div id="app">
<p :class="[activeClass, errorClass]"> 배열 문법이 멋질 거예요!</p>
</div>
<script>
new Vue({
el: '#app',
data: {
activeClass: 'active',
errorClass: 'text-danger'
}
})
</script>
이 경우, 'active'과 'text-danger' 클래스가 모두 문단에 적용됩니다.
인라인 스타일 바인딩
이제 인라인 스타일에 대해 이야기해 보겠습니다. 마치 요소에 즉시 마이크로 메이크오버를 주는 것처럼!
객체 문법
인라인 스타일을 객체를 사용하여 바인딩할 수 있습니다:
<div id="app">
<p :style="{ color: textColor, fontSize: fontSize + 'px' }">
나를 스타일링해 줘!
</p>
</div>
<script>
new Vue({
el: '#app',
data: {
textColor: 'red',
fontSize: 20
}
})
</script>
이렇게 하면 색상이 빨간색이 되고 글자 크기가 20px가 됩니다. 스타일 속성은 camelCase(fontSize
) 또는 kebab-case('font-size')를 사용할 수 있습니다.
배열 문법
스타일 객체의 배열을 사용할 수도 있습니다:
<div id="app">
<p :style="[baseStyles, overridingStyles]">스타일 배열</p>
</div>
<script>
new Vue({
el: '#app',
data: {
baseStyles: {
color: 'blue',
fontSize: '20px'
},
overridingStyles: {
fontWeight: 'bold'
}
}
})
</script>
이렇게 하면 여러 스타일 객체를 적용할 수 있으며, 배열에서 더 나중에 오는 객체는 충돌이 있을 경우 이전 객체를 덮어씁니다.
폼 입력 바인딩
폼 입력 바인딩은 Vue.js가 정말 빛나는 부분입니다. 마치 폼 입력과 데이터 사이에 직통전화线路을 가지고 있는 것처럼!
텍스트 입력
간단한 텍스트 입력을 시작해 보겠습니다:
<div id="app">
<input v-model="message" placeholder="수정해 보세요">
<p>메시지는: {{ message }}</p>
</div>
<script>
new Vue({
el: '#app',
data: {
message: ''
}
})
</script>
v-model
디렉티브는 입력과 message
데이터 속성 간에 양방향 바인딩을 만듭니다. 입력에서 발생하는 모든 변경은 즉시 message
에 업데이트되고, 반대로도 마찬가지입니다.
체크박스
체크박스는 작은 켜고 끄는 스위치입니다. 이렇게 바인딩합니다:
<div id="app">
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>
</div>
<script>
new Vue({
el: '#app',
data: {
checked: false
}
})
</script>
체크박스가 체크되면 checked
속성이 참이 되고, 체크가 해제되면 거짓이 됩니다.
라디오 버튼
라디오 버튼은 여러 가지 중 하나를 선택할 수 있는 다양한 질문입니다. 동시에 하나만 선택할 수 있습니다:
<div id="app">
<input type="radio" id="one" value="One" v-model="picked">
<label for="one">One</label>
<br>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Two</label>
<br>
<span>선택됨: {{ picked }}</span>
</div>
<script>
new Vue({
el: '#app',
data: {
picked: ''
}
})
</script>
picked
속성은 선택된 라디오 버튼의 값을 가지게 됩니다.
선택 드롭다운
마지막으로 선택 드롭다운을 살펴보겠습니다:
<div id="app">
<select v-model="selected">
<option disabled value="">하나를 선택하세요</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<span>선택됨: {{ selected }}</span>
</div>
<script>
new Vue({
el: '#app',
data: {
selected: ''
}
})
</script>
selected
속성은 선택된 옵션의 값을 가지게 됩니다.
바인딩 방법 요약
이제 우리가 다룰 바인딩 방법의 빠른 참조 표를 보여드리겠습니다:
바인딩 유형 | 문법 | 설명 |
---|---|---|
클래스 (객체) | :class="{ className: condition }" |
조건에 따라 클래스 적용 |
클래스 (배열) | :class="[class1, class2]" |
여러 클래스 적용 |
스타일 (객체) | :style="{ property: value }" |
인라인 스타일 적용 |
스타일 (배열) | :style="[styleObject1, styleObject2]" |
여러 스타일 객체 적용 |
폼 입력 | v-model="dataProperty" |
폼 입력과 데이터 속성 간 양방향 바인딩 |
이제 Vue.js 바인딩의 fascinaiting 세계로의 첫 걸음을 내셨습니다. 연습이 완벽을 만든다는 것을 기억하고, 이 개념들을 실험해 보지 마세요. 얼마 지나지 않아 바인딩을 마스터하실 것입니다! 행복한 코딩을 기원합니다!
Credits: Image by storyset