vue에서의 데이터 바인딩은, 최근 개발자들이 vue에 관심을 많이 갖는 최대의 이유가 아닐까한다. 특히 DB와 연결한 간편한 양방향 바인딩은 응용할 만한 분야의 폭이 넓다. 먼저 v-bind를 살펴보면, v-bind의 사용법은 아래와 같은 식이다.
v-bind:argument
vue에서는 바인딩을 걸때 " : " 혹은 " = "를 사용한다. 처음에는 클론을 사용할 지 이꼴을 사용할지 헷갈릴 수 있는데, 클론을 사용하는 경우는 v-bind와 v-on(이벤트)밖에 없다고 생각하면 쉽게 암기할 수 있다.
1 단방향 바인딩
v-bind를 사용하면 간편하게 데이터와 연결할 수 있다. 여기서 '간편함'이란, 서버를 거치지않고 view영역에서 처리함을 의미한다. html태그에 있는 속성에 클론과 'v-bind'를 입력하는 것으로써 간단하게 데이터를 연결할 수 있다.
<div id="app">
v-for를 활용한다면 data에 있는 배열(myBG)속의 객체값들을 img변수에 담을 수 있다. src속성에 v-bind값으로 img.src를 설정해주면, data의 myBG객체의 src값을 이미지태그의 src값으로 지정할 수 있다. 앵커태그(a) 역시 img태그와 동일한 방식으로 data값을 불러올 수 있다. 문제는 class와 style속성이다.
<style>
.onCheck{
color:red;
}
</style>
<div id="app">
그리고 사용자 반응에 따라 style값이 변할 필요가 없다면 아래와 같이 간단하게 작성한다.
<div id="app">
<h1 v-bind:style="myStyle">My Style</h1>
</div>
..(중략)
data : {
myStyle{ color:'red', border:1px solid blue, fontSize:24px, textAlign:'center'}
}
2 양방향 바인딩
양방향 바인딩은 사용자의 입력값에 따라 데이터값이 변하고, 데이터값이 변하면 화면에 보이는 값도 달라진다. 양방향 바인딩의 대표적 사례는 로그인 값을 즉시 체크해주는 폼 기능이다. 최근 쇼핑몰에 접속한 경우를 떠올려보자.
언제부터 로그인 폼에서 아이디와 비밀번호를 실시간으로 체크해주는 사이트가 많이 등장했다. 이른바 사용자가 입력한 값을 DB에서 즉시 체크해서 결과를 view로 전달해주는 양방향 통신인데, vue를 사용하면 간단하게 구사할 수 있다. 원리는 간단하다. 특정 페이지가 로딩되기 전에 서버에서 가져온 JSON데이터를 data프로퍼티에 저장해놓고, 사용자가 입력한 값을 form태그를 통해 체크하면 된다.
양방향 바인딩은 주로 Form태그와 함께 사용하며, V-model="속성값"형식으로 사용가능하다.
<textarea v-model="message">{{myMessage}}</textarea>
양방향 바인딩에서 주의해야 할 점은 input태그의 file타입에는 사용할 수 없다는 점이다. file타입에서는 단방향 바인딩을 사용할 수 있으며, 아래와 같이 methods와 함께 사용해야 한다. 이 부분을 헷갈리면 꽤 많은 삽질을 하게 된다.
<div id="app2">
<form>
<input type="file" v-on:change="fileSlc">
<img v-bind:src="slc2">
<p>{{slc2}}</p>
</form>
</div>
file타입에는 자바스크립트 DOM에서 사용하는 change이벤트를 그대로 사용할 수 있고, methods에 있는 함수를 연결한다. 이때 함수명()과 같은 양식이 아닌 '함수명'만 입력한다. img태그에는 단방향 바인딩으로 src속성에 연결하고, vue인스턴스를 작성한다.
* vue 인스턴스
<script>
let slc3='이미지경로';
let vueImgTest = new Vue({
el:'#app2',
data : {
slc2:slc3
},
methods:{
fileSlc : function(event){
let file = event.target.files[0]
this.slc2 = window.URL.createObjectURL(file)
}
}
});
</script>
file태그에 이미지 파일을 올려보자. {{slc2}}부분에 해당 파일에 관한 정보가 뜨고, 이미지가 나올 것이다. 이렇게 단방향 바인딩과 methods를 결합하면, 수동적인 양방향 바인딩을 구현할 수 있다. 또한 양방향 바인딩을 통해 아무말 변환기나 맞춤법 검사기도 가능하다. 단, 맞춤법 사전이나 아무말이 기록된 DB(json파일)가 있어야 한다.
'코드 스터디' 카테고리의 다른 글
1편. 객체지향 설계 5원칙[SOLID] Single Responsibility Principle (단일 책임 원칙) (3) | 2020.03.26 |
---|---|
html5 캔버스『시간,상태,동작구현』 (0) | 2020.02.14 |
vue 활용하기 3편 v-if else구문, 장바구니 품절기능 만들기 (0) | 2019.11.06 |
객체 설계의 원칙『 설계가 왜 필요할까?』 (0) | 2019.10.31 |
git 명령어 정리 (0) | 2019.10.29 |
댓글