Vue.js는 렌더링 된 DOM을 기본 Vue 인스턴스의 데이터에 선언적으로 바인딩 할 수있는 HTML 기반 템플릿 구문을 사용.
모든 Vue.js 템플릿은 스펙을 호환하는 브라우저 및 HTML 파서로 구문 분석 할 수있는 유효한 HTML.
내부적으로 Vue는 템플릿을 가상 DOM 렌더링 함수로 컴파일 합니다. 반응형 시스템과 결합된 Vue는 앱 상태가 변경 될 때 최소한으로 DOM을 조작하고 다시 적용할 수 있는 최소한의 컴포넌트를 지능적으로 파악할 수 있다.
가상 DOM 개념에 익숙하고 JavaScript의 기본 기능을 선호하는 경우 템플릿 대신 렌더링 함수를 직접 작성할 수 있으며 선택사항으로 JSX를 지원.
보간법(Interpolation)
# 문자열
데이터 바인딩의 가장 기본 형태는 “Mustache” 구문(이중 중괄호)을 사용한 텍스트 보간
<span>메시지: {{ msg }}</span>
v-once 디렉티브를 사용하여 데이터 변경 시 업데이트 되지 않는 일회성 보간을 수행할 수 있지만, 같은 노드의 바인딩에도 영향을 미친다는 점을 유의.
# 원시 HTML
이중 중괄호(mustaches)는 HTML이 아닌 일반 텍스트로 데이터를 해석
실제 HTML을 출력하려면 v-html
디렉티브를 사용해야 한다.
# 속성
Mustaches는 HTML 속성에서 사용할 수 없습니다. 대신 v-bind 디렉티브를 사용
<button v-bind:disabled="isButtonDisabled">Button</button>
isButtonDisabled
가 null
, undefined
또는false
의 값을 가지면 disabled
속성은 렌더링 된<button>
엘리먼트에 포함되지 않는다.
# JavaScript 표현식 사용
실제로 Vue.js는 모든 데이터 바인딩 내에서 JavaScript 표현식의 모든 기능을 지원
각 바인딩에 하나의 단일 표현식 만 포함될 수 있다.
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
{{ message.split('').reverse().join('') }}
<div v-bind:id="'list-' + id"></div>
디렉티브
디렉티브는 v-
접두사가 있는 특수 속성. 디렉티브 속성 값은 단일 JavaScript 표현식 (v-for
는 예외)
디렉티브의 역할은 표현식의 값이 변경될 때 사이드이펙트를 반응적으로 DOM에 적용.
<p v-if="seen">이제 나를 볼 수 있어요</p> |
여기서, v-if
디렉티브는 seen
표현의 진실성에 기반하여 <p>
엘리먼트를 제거 또는 삽입.
# 전달인자
일부 디렉티브는 콜론으로 표시되는 “전달인자”를 사용할 수 있다.
<a v-bind:href="url"> ... </a> |
여기서 href
는 전달인자로, 엘리먼트의 href
속성을 표현식 url
의 값에 바인드하는 v-bind
디렉티브에게 알려준다.
또 다른 예로 DOM 이벤트를 수신하는 v-on
디렉티브.
<a v-on:click="doSomething"> ... </a> |
전달인자는 이벤트를 받을 이름.
# 수식어
수식어는 점으로 표시되는 특수 접미사로, 디렉티브를 특별한 방법으로 바인딩 해야 함을 나타낸다.
예를 들어, .prevent
수식어는 트리거된 이벤트에서 event.preventDefault()
를 호출하도록 v-on
디렉티브에게 알려준다.
<form v-on:submit.prevent="onSubmit"> ... </form> |
약어
v-
접두사는 템플릿의 Vue 특정 속성을 식별하기 위한 시각적인 신호 역할.
Vue.js가 모든 템플릿을 관리하는 SPA를 만들 때 v-
접두어의 필요성이 떨어짐.
따라서 가장 자주 사용되는 두개의 디렉티브인 v-bind
와 v-on
에 대해 특별한 약어를 제공.
# v-bind 약어
<!-- 전체 문법 -->
<a v-bind:href="url"> ... </a>
<!-- 약어 -->
<a :href="url"> ... </a>
# v-on 약어
<!-- 전체 문법 -->
<a v-on:click="doSomething"> ... </a>
<!-- 약어 -->
<a @click="doSomething"> ... </a>
'Vue.js' 카테고리의 다른 글
Computed와 Watch (0) | 2019.01.08 |
---|---|
SPA(Single Page Application) (0) | 2019.01.06 |
Vue 인스턴스 (0) | 2019.01.06 |
Vue.js 시작하기 (0) | 2019.01.02 |
Vue CLI 로 Webpack Simple 프로젝트 생성 (1) | 2019.01.02 |