프로그래밍/JavaScript

[Vue] 시작하기 02

mhko411 2021. 5. 8. 21:11
728x90

사용자 입력 핸들링

사용자와 앱이 상호작용할 수 있도록 이벤트 리스너를 사용하는데 Vue에서는 v-on을 통해 할 수 있다. 다음은 버튼을 눌렀을 때 문자열을 뒤집는 것이다. v-on에 이벤트를 등록할 수 있으며 여기서 click 이벤트가 발생했을 때 reverseMessage함수를 등록한다. 함수 등록은 methods 안에 정의한다.

<body>
  <div id="app">
    <p>{{ message }}</p>
    <button v-on:click="reverseMessage">문자열 뒤집기</button>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el:'#app',
      data:{
        message:'Javascript'
      },
      methods:{
        reverseMessage: function () {
          this.message = this.message.split('').reverse().join('')
        }
      }
    })
  </script>
</body>

위와 똑같은 기능을 바닐라 자바스크립트로 아래와 같이 작성할 수 있다. 아래의 코드에서는 DOM을 직접 조작하여 기능을 만들지만 Vue에서는 내부에서 DOM조작을 도와준다.

<body>
  <div class="app">
    <p>Javascript</p>
    <button>문자열 뒤집기</button>
  </div>
  <script>
    const div = document.querySelector('.app');
    const p = div.querySelector('p');
    const button = div.querySelector('button');
    button.addEventListener('click', reverseMessage);

    function reverseMessage () {
      let message = p.innerText;
      p.innerText = message.split('').reverse().join('');
    }
    
  </script>
</body>

 

v-model을 통해 입력과 동시에 데이터가 변경되는 양방향으로 바인딩할 수 있다. 아래의 코드를 통해 input이 message와 연결이되고 입력과 동시에 message의 값이 변한다.

<body>
  <div id="app">
    <p>{{ message }}</p>
    <input v-model="message">
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el:'#app',
      data:{
        message:'hello'
      }
    })
  </script>
</body>

위의 기능을 바닐라 자바스크립트로 구현하면 다음과 같다. Vue에서 input과 message가 연결된 것처럼 구현한 것을 각각의 DOM 요소를 조작하고 있으며 <input>에 이벤트 리스너를 등록하여 입력할 때마다 이벤트 함수가 실행된다. 이벤트 함수에서는 현재 입력한 내용을 <p>에 저장하는 기능을 하고있다.

<body>
  <div class="id">
    <p></p>
    <input type="text">
  </div>
  <script>
    const div = document.querySelector('.id');
    const p = div.querySelector('p');
    const input = div.querySelector('input');

    input.addEventListener('input', handleInput);
    
    function handleInput(event) {
      const message = event.target.value;
      p.innerText = message;
    }
  </script>
</body>

참고 kr.vuejs.org/v2/guide/index.html#%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%9E%85%EB%A0%A5-%ED%95%B8%EB%93%A4%EB%A7%81

'프로그래밍 > JavaScript' 카테고리의 다른 글

[Vue] 싱글 파일 컴포넌트(SFC)  (0) 2021.05.11
[Vue] computed와 watch  (0) 2021.05.10
[Vue] Vue 인스턴스  (0) 2021.05.09
[Vue] 시작하기 01  (0) 2021.05.07
동기와 비동기  (0) 2021.05.03