개발/vue.js

Vue.js 데이터 바인딩

whatd0udo 2024. 5. 3. 15:18

데이터 바인딩

Vue.js에서 데이터 바인딩은 컴포넌트의 데이터와 템플릿을 연결하는 핵심 기능입니다.

이를 통해 동적으로 데이터를 화면에 표시하고 사용자의 입력과 상호작용을 관리할 수 있습니다.

1. 문자열 데이터 바인딩

  • 용도: 텍스트 데이터를 HTML 요소에 바인딩하여 화면에 표시합니다.
  • 구현 방법: {{ }} (Mustache 태그)를 사용하여 데이터를 텍스트 형태로 렌더링합니다.
    <template>
      <p>{{ message }}</p>
    </template>
    
    <script>
    export default {
      data() {
        return {
          message: 'Hello Vue!'
        }
      }
    }
    </script>
    
    

2. 원시 HTML 데이터 바인딩

  • 용도: HTML 코드를 포함한 문자열을 화면에 렌더링할 때 사용합니다.
  • 구현 방법: v-html 지시자를 사용하여 HTML을 원시 HTML로 렌더링합니다.
    <template>
      <div v-html="htmlContent"></div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          htmlContent: '<strong>Bold text</strong>'
        }
      }
    }
    </script>
    
    

3. form 입력 데이터 바인딩

  • 용도: 폼 입력과 같은 인터랙티브 요소의 데이터를 동적으로 관리합니다.
  • 구현 방법: v-model 지시자를 사용하여 양방향 데이터 바인딩을 설정합니다.
    <template>
      <input v-model="username" placeholder="Enter your name">
    </template>
    
    <script>
    export default {
      data() {
        return {
          username: ''
        }
      }
    }
    </script>
    
    
  • 예시:

4. 속성 바인딩

  • 용도: HTML 속성을 동적으로 바인딩합니다.
  • 구현 방법: v-bind 지시자 또는 : 축약형을 사용하여 속성에 데이터를 바인딩합니다.
    <template>
      <img :src="imageUrl" alt="Vue logo">
    </template>
    
    <script>
    export default {
      data() {
        return {
          imageUrl: 'path/to/vue-logo.png'
        }
      }
    }
    </script>
    
    
  • 예시:

5. 클래스 바인딩

  • 용도: 요소의 클래스를 조건에 따라 동적으로 추가하거나 제거합니다.
  • 구현 방법: 객체 또는 배열 구문을 사용하여 클래스를 바인딩합니다.
    <template>
      <div :class="{ active: isActive }">Active Box</div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          isActive: true
        }
      }
    }
    </script>
    
    

6. 인라인 스타일 바인딩

  • 용도: 요소의 인라인 스타일을 동적으로 관리합니다.
  • 구현 방법: 객체 또는 배열 구문을 사용하여 스타일을 바인딩합니다.
  • 예시:
    <template>
      <div :style="{ color: activeColor, fontSize: fontSize + 'px' }">
        Styled text
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          activeColor: 'red',
          fontSize: 30
        }
      }
    }
    </script>​