Vue.js - Directives

Updated:

디렉티브 Directives

디렉티브는 v- 접두사가 있는 특수속성

디렉티브 속성 값은 단일 JacaScript 표현식이 됨 (v-for는 예외)

디렉티브의 역할은 표현식의 값이 변경될 때 사이드 이펙트를 반응적으로 DOM에 적용

v-model

양방향 바인딩 처리를 위해서 사용

  • Data binding이란 VueJs의 binding expressions을 사용하여 script와 DOM간의 데이터를 주고받는 과정을 의미
<div id="app">
      <input type="text" v-model="msg" />
      <div v-html="msg"></div>
    </div>
    <script>
      new Vue({
        el: "#app",
        data: {
          msg: "<h2>'Hello Vue~!'</h2>",
        },
      });
    </script>

v-bind

엘리먼트의 속성과 바인딩 처리를 위해서 사용
v-bind는 약어로 “:” 로 사용 가능.


    <div id="app">
        <!-- 속성을 바인딩. -->
        <div v-bind:id="idValue">v-bind 지정 연습</div>
        <button v-bind:[key]="btnId">버튼</button>

        <!-- 약어를 이용한 바인딩. -->
        <div :id="idValue">v-bind 지정 연습</div>
        <button :[key]="btnId">버튼</button>

        <a v-bind:href="link1">구글</a>
        <a :href="link2">네이버</a>
    </div>
    <script>
        new Vue({
            el: '#app',
            data: {
                idValue: 'test-id',
                key: 'id',
                btnId: 'btn1',
                link1: 'http://www.google.com',
                link2: 'http://www.naver.com'
            }
        });
    </script>

v-show

조건에 따라 엘리먼트를 화면에 렌더링.
style의 diplay를 변경.

    <div id="app">
      <div v-show="isShow"></div>
    </div>
    <script>
      new Vue({
        el: "#app",
        data: {
          isShow: true,
          msg: "보이나요?",
        },
      });
    </script>

v-if, v-else-if, v-else

조건에 따라 엘리먼트를 화면에 렌더링

  <div id="app">
      <div>
        <span>나이 : </span>
        <input type="number" v-model="age" />
      </div>
      <div>
        요금 :
        <span v-if="age < 10">무료</span>
        <span v-else-if="age < 20">7000</span>
        <span v-else-if="age < 65">10000</span>
        <span v-else>3000</span>
      </div>
    </div>
    <script>
      const vm = new Vue({
        el: '#app',
        data: {
          age: '0',
        },
      });
    </script>

v-for

배열이나 객체의 반복에 사용
v-for=”요소변수이름 in 배열”
v-for=”(요소변수이름,인덱스) in 배열”

   <div id="app">
      <h2>범위지정(4)</h2>
      <span v-for="i in 4">  </span>

      <h2>문자열 배열</h2>
      <ul>
        <li v-for="name in regions"></li>
      </ul>

      <h2>문자열 배열 - 위치</h2>
      <ul>
        <li v-for="(name, i) in regions">번호 : , 지역 : </li>
      </ul>
    </div>
    <script>
      new Vue({
        el: "#app",
        data: {
          regions: ["광주", "구미", "대전", "서울"],
        },
      });
    </script>

template

여러 개의 태그들을 묶어서 처리해야 할 경우 template 사용.
v-if, v-for, component 등과 함께 많이 사용

<template v-if="count % 2 == 0">
  <h4>여러개의 태그를 묶어서 처리해야 한다면??</h4>
  <h4>template 태그를 사용해 보자</h4>
  <h4>만약에 template가 없다면?? 각태그마다 v-if?</h4>
</template>

Vue method ?

Vue 인스턴스는 생성과 관련된 data 및 method의 정의 가능
method 안에서 data를 “this.데이터이름” 으로 접근 가능

    <div id="app">
      <div>data : </div>
      <div>method kor : </div>
      <div>method eng : </div>
    </div>
    <script>
      new Vue({
        el: '#app',
        data: {
          message: 'Hello ~',
          name: '',
        },
        methods: {
          helloEng() {
            return 'Hello ' + this.name;
          },
          helloKor() {
            return '안녕 ' + this.name;
          },
        },
      });
    </script>

Leave a comment