본문 바로가기
vue

Vue - 양방향 바인딩

by 초특급하품 2021. 5. 15.

vue js를 소개하는 가장 대표적인 기능이 양방향 데이터 바인딩이다.

 

공식 홈페이지 첫 화면에 대문짝만 하게 보여주는 progressive framework 취지에 맞게 낮은 진입장벽으로 일부분만 vue로 적용해 갈 수 있는데, vue로 바꿔나갈 때 당장 사용할 수 있는 기능이기 때문인 것 같다. 

 

 

 

 

고수준의 양방향 데이터 바인딩을 하기 전에 html과 데이터 사이를 연결시키는 저수준의 문법부터 먼저 적용해보자. 

 

단순히 vue 인스턴스의 데이터에 text라는 변수를 선언하면 html에서 사용할 수 있다. script에 있는 데이터를 html에서 사용하도록 바인딩한 것이다.

<body>
  <div id="app">
    {{ text }}
  </div>
  <script>
    new Vue({
      el: "#app",
      data: {
        text: "I am Vue"
      }
    })
  </script>
</body>

text 변수에 선언한 값이 보여진다.

 

 

 

 

그럼 반대로 html에서 text라는 변수를 업데이트하기 위해 input 태그를 추가해보자.

 

아래 사용하는 v-bind 문법은 vue에서 사용하는 v- prefix로 시작하는 html 문법으로 디렉티브라고 불린다. v-bind::로 바꿔 사용해도 된다.

<div id="app">
  <input type="text" v-bind:value="text"> <br>
  {{ text }}
</div>

input 태그 안에 text 변수가 보여진다.

 

지금까지는 단방향 바인딩만 사용했기 때문에 input 태그의 값을 바꾼다고 해서 아래 {{ text }} 값이 바뀌진 않는다. 

보통의 프론트 코드처럼 이벤트를 받아서 text 값을 업데이트하는 작업이 필요하다.

 

input 태그에 키보드 이벤트를 추가한다. 역시 v-on:@로 바꿔도 된다.

<input type="text" v-bind:value="text" v-on:keyup="updateText">

 

이벤트를 받아줄 updateText 함수를 vue 인스턴스에도 추가한다.

methods: {
  updateText(e) {
    this.text = e.target.value
  }
}

 


 

이렇게 하면 단방향 바인딩 + 이벤트 처리로 양방향 바인딩을 구현할 수 있다. 

 

vue에서는 v-model 디렉티브로 양방향 바인딩을 시킬 수도 있다. 아래 속성 하나로 위에서 작업한 내용을 모두 대체할 수 있다.

<input type="text" v-model="text">

 

'vue' 카테고리의 다른 글

Vue - reactivity  (0) 2021.05.16

댓글