디렉티브
- HTML 요소에 동작과 기능을 부여를 더 쉽게 할 수 있습니다.
- HTML 태그 안에 v-접두사 형식으로 표시되며, Vue.js가 HTML을 해석하고 동적으로 조작할 수 있도록 돕습니다.
{{ }} (v-text): 데이터 바인딩
- HTML 화면 요소에 뷰 인스턴스 데이터를 연결하고 표시합니다.
- v-text 기능과 같은 역할을 합니다.
- {{ message }}
- 위 예제에서 처럼 {{ }}을 사용하여 데이터를 바인딩 합니다.
- 만약 data 속성의 값이 바뀌면 뷰 반응성에 의해 자동으로 갱신됩니다.
- data 속성의 값이 변경되어 값을 바꾸고 싶지 않으면 v-once 속성을 사용하면 됩니다.
- {{ message + " Bye" }}, {{ message.split(' '). reverse() }} 과 같이 JS 표현식을 쓸 수 있습니다.
v-bind: 요소의 속성을 데이터로 지정
HTML 요소의 속성 값을 Vue 인스턴스의 데이터를 동적으로 바인딩합니다. 'v-bind'를 사용하면 HTML 속성의 값을 Vue 데이터와 동기화하여 데이터의 변경에 따라 속성 값이 자동으로 업데이트 됩니다.
아래와 같이 사용되며 'v-bind' 문법을 ':'로 축약하여 사용할 수 있습니다.
<태그명 v-bind:속성="프로퍼티명"></태그명>
<태그명 :속성="프로퍼티명"></태그명>
'v-bind'를 사용해서 HTML 속성, 스타일, 클래스에 바인딩합니다.
이를 통해 Vue 인스턴스의 데이터 변경에 따라 속성 값이 자동으로 업데이트되어 동적인 UI를 구현할 수 있습니다.
<!-- 정렬 지정 -->
<div v-bind:align="프로퍼티명"></div>
<!-- 스타일 지정 -->
<div v-bind:style="프로퍼티명"></div>
<div v-bind:style="{color:프로퍼티명"></div>
<div v-bind:style="{fontSize:프로퍼티명"></div>
<!-- 클래스 지정 -->
<!-- 복수개의 클래스 지정 가능, true,false로 활성화 가능 -->
<div v-bind:class="프로퍼티명"></div>
<div v-bind:class="[프로퍼티명, 프로퍼티명]"></div>
<div v-bind:class="{'클래스명': ture|false }"></div>
<!-- 링크 지정 -->
<a v-bind:href="링크"></a>
v-model: 입력 form과 데이터와 연결
- 폼 입력 요소와 Vue 인스턴스의 데이터를 동기화하여 양방향 데이터 바인딩을 쉽게 구현할 수 있습니다.
- 사용자가 입력 폼 값을 변경하면 데이터가 업데이트 되고, 데이터가 변경되면 입력 요소의 값도 업데이트 됩니다.
- `v-model` 디렉티브는 폼 입력 요소에 사용되기 때문에 다음과 같은 폼 태그에서 쓰입니다.
- <input>
- <checkbox>
- <radio>
- <select>
- <textarea>
텍스트
<div id="app">
<input v-model="demoText">
<div>Hello {{ demoText }}</div>
</div>
<script>
new Vue({
el: '#app',
data: {
demoText: ''
}
})
</script>
textarea
<div id="app">
<textarea v-model="demoText"></textarea>
<div>문장: {{ demoText }}</div>
<div>문자길이: {{ demoText.length }}</div>
</div>
<script>
new Vue({
el: '#app',
data: {
demoText: '기존 입력된 텍스트'
}
})
</script>
checkbox
<!-- 단일 체크 박스 체크 여부 -->
<!-- check하면 true, 하지 않으면 false 출력 -->
<div id="app">
<label>
<input type="checkbox" v-model="isChecked">
체크박스 상태 {{ isChecked }}
</label>
</div>
<script>
new Vue({
el: '#app',
data: {
isChecked: false
}
})
</script>
<!-- 복수 체크 박스 체크 여부 -->
<div id="app">
<label>
<input type="checkbox" value="male" v-model="gender">
남 {{ isChecked }}
</label>
<label>
<input type="checkbox" value="female" v-model="gender">
여 {{ isChecked }}
</label>
<div>
성별: {{ gender }}
</div>
</div>
<script>
new Vue({
el: '#app',
data: {
gender: []
}
})
</script>
복수 체크 박스에서 동일한 프로퍼티명으로 v-model를 지정함으로 하나의 그룹으로 묶입니다.
해당 체크박스가 체크되면 배열에 값이 담깁니다.
체크 박스를 이용하여 약관 동의 시에만 가입할 수 있게 하는 예제
<div id="app>
<label>
<input type="checkbox" v-model="isAgreement"> 약관 동의
</label>
<button v-bind:disabled="!isAgreement">가입</button>
</div>
radio
<input type="radio" value="value1" v-model="동일한프로퍼티명">
<input type="radio" value="value2" v-model="동일한프로퍼티명">
<input type="radio" value="value3" v-model="동일한프로퍼티명">
<div>
선택한 값: {{ 동일한프로퍼티명 }}
</div>
select
<select v-model="프로퍼티명" [multiple]>
<option disabled value="">선택</option>
<option>value1</option>
<option>value2</option>
<option>value3</option>
</select>
<div>
선택한 select는 {{ 프로퍼티명 }}
</div>
단일 체크박스와 복수 체크박스 차이 처럼
복수의 선택(multiple)을 하는 경우 선택한 문자열을 배열로 표시하면 됩니다.
v-on: 이벤트 연결
HTML 요소의 이벤트와 Vue 인스턴스의 메서드를 연결하여 이벤트를 처리할 수 있습니다.
사용법은 아래와 같으며 `v-on:click` 대신 `@click`으로 대체하여 사용하는 것이 가능합니다.
<태그명 v-on:click="메서드명"></태그명>
<태그명 @click="메서드명"></태그명>
v-on 이벤트 종류
- 클릭(click)
- 입력(input)
- 제출(submit)
- 키보드 이벤트
<!-- 클릭 이벤트 -->
<button v-on:click="handleClick">click!</button>
<!-- 입력 이벤트: 입력 필드의 내용이 변경되면 `handleInput` 메서드 호출됩니다. -->
<input v-on:input="handleInput" type="text">
<!-- 키보드 이벤트
키수식자
.enter / .tab / .space / .delete / .esc / .up / .down / .left / .right / .48~.57 (0~9) / .65~.90 (A~Z)
시스템 키 수식자
키 수식자에 시스템 키 수식자를 지정하면, 키를 누를 때 시스템 키를 동시에 눌러야만 작동합니다.
.ctrl / .alt / .shift / .meta(Windows | command)
예) <button @keyup.enter.shift="GenerateAlert">click</button>
-->
<input v-on:keyup.키수식자="메서드명">
v-if: 조건 분기
<태그명 v-if="조건1">조건1 true면 출력</태그명>
<태그명 v-else-if="조건2">false이고, 조건2 true면 출력</태그명>
<태그명 v-else>위 조건에 아무것도 해당하지 않으면 출력</태그명>
v-for: 반복문
<태그명 v-for="변수 in 값">...</태그명>
<태그명 v-for="변수 in 배열">...</태그명>
<태그명 v-for="(변수, index) in 배열">...</태그명>
<태그명 v-for="(value, key) in 객체" :key="key">
{{ key }}: {{ value }}
</태그명/>
`v-for`로 객체를 가져올 때 (value, key) 순서임에 주의해야 합니다.
또한 `v-for`를 사용하여 객체를 반복할 때는 반복하는 객체의 순서가 보장되지 않기 때문에 객체의 속성 순서를 반드시 보장해야 할 때는, 배열 형태로 데이터를 구성하여 `v-for`를 적용해주어야 합니다.
'Front-End > Vue.js' 카테고리의 다른 글
Vue.js 필터(Filters) 이용하여 날짜 형식 변환하기 (0) | 2023.05.15 |
---|---|
Vue.js 배열 추가, 삭제, 정렬 (push, splice, sort) (0) | 2023.05.12 |
Vue.js axios를 이용한 HTTP 통신 (0) | 2023.05.11 |
Vue.js Router로 싱글 페이지 어플리케이션(SPA) 페이지 라우팅 구현 (0) | 2023.05.10 |
Vue.js 컴포넌트: Props, Emit, Event Bus를 활용한 통신 방법 (0) | 2023.05.10 |