Directive

  • v- 접두사가 있는 특수한 속성
<p v-if="seen">Hi There</p>

구문

v-on:submit.prevent="onSubmit"
Name:Argument.Modifier=value

image

<a v-bind:href="url"> ... </a>  
  
<a :href="url"> ... </a>
<a v-on:click="doSomething"> ... </a>  

<a @click="doSomething"> ... </a>
동적 인자
  • 디렉티브의 인자를 대괄호로 감싸서 Javascript 표현식 사용 가능
<a v-bind:[attributeName]="url"> ... </a>  

<a :[attributeName]="url"> ... </a>
  • 동적인자는 null 또는 문자열로 평가되어야 한다.
  • 동적 인자는 공백 및 따옴표를 허용하지 않는다.
  • 대문자 이름 허용하지 않는다.

built-in function

v-bind

<div v-bind:id="dynamicId"> </div>
<div :id="dynamicId"> </div>
  • 단방향 바인딩
  • id 부분은 인자
  • 콜론 단축문법
Boolean 속성에서 v-bind
<button :disabled="isButtonDisabled">버튼</button>
  • true면 해당 속성 표기, false면 해당 속성 제거
다중 속성 v-bind
const objectOfAttrs = { id: 'container', class: 'wrapper' }

<div v-bind="objectOfAttrs"></div>
  • 단일 요소에 여러 속성 바인딩

v-model

  • 양방향 바인딩
<div id="app">  
    <input type="text" v-model="text1">  
    <input type="checkbox" name="" id="" v-model="selected">  
    <select name=""  id="1" v-model="selected2">  
        <option value="1">1</option>  
        <option value="2">2</option>  
        <option value="3">3</option>  
    </select>  
    <input type="checkbox" name="" id="Alice" v-model="selectedName" value="Alice">  
    <label for="Alice">Alice</label>  
    <input type="checkbox" name="" id="Tom" v-model="selectedName" value="Tom">  
    <label for="Tom">tom</label>  
</div>

<script>  
    const { createApp, ref } = Vue  
    const app = createApp({  
        setup() {  
            const text1 = ref();  
            const selected = ref(false);  
</script>
수식어
  • .lazy : change 이벤트 후 동기화
<input v-model.lazy="msg" />
  • .number : 사용자 입력자 자동으로 숫자 변환
<input v-model.number="age" />
  • .trim : 사용자 입력에서 공백 제거
<input v-model.trim="msg" />

v-on

<button v-on:click="increment">8</button>
<button @click="increment">8</button>
  • 이벤트 리스너
  • DOM 이벤트를 수신
  • @ 단축문법
이벤트 객체 획득
<button @click="warn('아직 양식을 제출할 수 없습니다.', $event)">  
  제출하기  
</button>  
  
<!-- 인라인 화살표 함수 사용 -->  
<button @click="(event) => warn('아직 양식을 제출할 수 없습니다.', event)">  
  제출하기  
</button>
이벤트 수식어
수식어 기능
.stop 이벤트 전파 중지
.prevent 페이지 리로드 중지
.self 엘리먼트 자신일 경우에만 핸들러 실행
.capture 내부 엘리먼트에서 클릭 이벤트 핸들러 실행되기 전 현재 엘리먼트에서 먼저 핸들러 실행
.once 한번만 실행
.passive 이벤트의 기본동작이 발생
입력 키 별칭
  • .enter
  • .tab
  • .delete (“Delete” 및 “Backspace” 키 모두 캡처)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right
  • .ctrl
  • .alt
  • .shift
  • .meta
마우스 버튼 수식어
  • .left
  • .right
  • .middle
.extract
  • 이벤트를 트리거하는 데 필요한 시스템 수식어의 정확한 조합 제어
<!-- Ctrl과 함께 Alt 또는 Shift를 누른 상태에서도 클릭하면 실행됩니다. -->  
<button @click.ctrl="onClick">A</button>  
  
<!-- 오직 Ctrl만 누른 상태에서 클릭해야 실행됩니다. -->  
<button @click.ctrl.exact="onCtrlClick">A</button>  
  
<!-- 시스템 입력키를 누르지 않고 클릭해야지만 실행됩니다. -->  
<button @click.exact="onClick">A</button>
마우스 버튼

v-html

<div v-html="rawHtml"></div>
  • 실제 html 이 출력됨

v-if

  • 요소를 DOM에 조건부로 렌더링
  • toggle 비용이 높음
	<div v-if="name === 'Alice'">Alice</div>
	<div v-else-if="name === 'Cathy'">Cathy</div>
	<div v-else-if="name === 'Tom'">Tom</div>
주의사항
  • v-if는 Directive 이기 때문에 단일 요소에만 연결 가능
  • 필요에 따라 template(wrapper) 요소에 여러 요소 연결하여 사용해야 한다.

v-show

  • 표현식 값을 기반으로 요소의 가시성을 전환
  • 초기 조건에 관계 없이 항상 렌더링, 초기비용이 더 높다.
<h1 v-show="ok">안녕!</h1>

v-for

  • 반복 요소 사용
  • alias 제공
  • 반드시 key를 함께 사용
	<div v-for="(item, index) in myArr"> / </div>
	<div v-for="(value, key, index) in myObj"> /  / </div>
	<li v-for="(item, index) in items"> 
		 -  -  
	</li>
  • 속성명의 별칭 추가
	<li v-for="(value, key) in myObject"> 
		: 
	</li>

연결문서

댓글남기기