일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- CSS
- javascript
- 커스텀
- reactjs
- 타입좁히기
- 폰트적용하기
- NonNullable
- typescript
- 누구나 자료구조와 알고리즘
- JS console
- 레이아웃쪼개기
- 2022
- 반복줄이기
- 제네릭
- const 단언문
- 티스토리꾸미기
- 공통컴포넌트
- 개발콘텐츠
- vue.js
- click and drag
- react
- returnType
- 타입스크립트
- React.js
- utilty type
- TSDoc
- 리액트
- 성능최적화
- Chart.js
- React Native
- Today
- Total
몽땅뚝딱 개발자
[Vue.js] 디렉티브(Directive) - (1) 본문
◽ 디렉티브란?
v-
를 prefix로 갖는다.
◽ 디렉티브의 종류
v-text
요구값: string
엘리먼트의 textContent를 업데이트한다.
<span v-text=“msg”></span>
<!-- 같은 방법 -->
<span>{{ msg }}</span>
v-html
요구값: string
일반 html을 삽입하며, vue 템플릿으로 컴파일되지 않는다.
해당 디렉티브를 사용하여 작성하려는 경우 컴포넌트를 사용하는 해결법으로 다시 생각해보라고 한다.
사용자가 제공한 컨텐츠에서는 절대로 사용하지 말아야 한다.
<div v-html=“html”></div>
v-show
요구값: any
true, false 여부로 엘리먼트의 display 속성을 전환한다.
<div v-show=“true”></div>
v-if
/ v-else-if
/ v-else
요구값: any
표현식 값의 true, false에 따라 엘리먼트를 조건부로 렌더링한다.
단, v-else의 경우 표현식이 필요없다.
<div v-if="type === 'A'">
A
</div>
<div v-else-if="type === 'B'">
B
</div>
<div v-else-if="type === 'C'">
C
</div>
<div v-else>
Not A/B/C
</div>
v-for
요구값: array, object, number, string, Iteralble
원본 데이터를 기준으로 엘리먼트나 템플릿 block을 여러번 렌더링한다.
디렉티브의 값은 엘리먼트에 별칭을 제공하기위해 ‘alias in expression’ 문법을 사용해야한다.
<!-- 'alias in expression' 문법 -->
<div v-for=“item in items” :key=“item.id”>
{{ item.text }}
</div>
그리고 vue에서는 각 노드의 id를 추적하여 유일한 값을 주는 key 속성을 사용하여 정렬힌트를 제공해야한다고 한다.
반복되는 DOM 내용이 단순하거나 성능 향상을 위하여 기본 동작에 의존하지 않는 경우를 제외하고는 언제나 key를 추가하는 것이 좋다.
<!--
data의 형태가 { title: ‘hello’, author: ‘tester’ } 인 경우,
‘name’에 해당하는 값은 title, author
‘value’에 해당 하는 값은 hello, tester
-->
<div v-for=“(item, index) in items”></div>
<div v-for=“(value, key) in items”></div>
<div v-for=“(value, name, index) in items”></div>
v-on
요구값: funtion, inline-statement, object
약칭으로 @를 사용하며, 전달인자는 event이다.
<!— 메서드 핸들러 —>
v-on:click=“이벤트이름”
<!— 동적 이벤트 —>
v-on:[event]=“이벤트이름”
v-bind
약칭으로 :를 사용한다.
<!-- 약칭 적용 전 -->
<img v-bind:src=“imageSrc” />
<!-- 약칭 적용 후 -->
<img :src=“imageSrc”>
<!-- CSS 속성 부여하기 -->
<div :class=“{ red: isRed }“>
<div :class=“[classA, { classB: isB }, class C]”>
<!-- .camel의 사용
문자열 템플릿을 사용하거나 vue-loader 또는 vuetify로 컴파일하는 경우 불필요하다. -->
<svg :view-box.camel=“viewBox”></svg>
v-model
input, textarea, select 요소들에 양방향 바인딩을 생성한다.
v-model은 엘리먼트의 초기값, checked 속성, selected 속성 모두를 무시하며 Vue 인스턴스 데이터를 원본 소스로 취급한다.
따라서 기본값이 필요한 경우에는 스크립트 영역의 data 옵션에서 초기값을 선언해주어야한다.
v-model의 수식어
- .lazy: input 대신 change 이벤트를 수신)
- .number: 유효한 입력 문자열을 숫자로 캐스팅)
- .trim: 입력값에 공백제어)
textarea에서 텍스트 보간은 작동하지 않는다.
<!-- 작동하지 않으므로 v-model을 사용해야한다. -->
<textarea>{{ text }}</textarea>
출처
개인적으로 공부한 내용을 정리하는 블로그로
잘못된 개념을 게시하지않도록 주의하고 있으나 오류가 있을 수 있습니다.
'Development > Vue.js' 카테고리의 다른 글
[Vue.js] import 사용 시 경로에 별칭 사용하기 / @ (vue-cli 3~) (0) | 2021.12.07 |
---|---|
[Vue.js] Vue.js에서 Sass(SCSS) 사용하기 (0) | 2021.12.06 |
[Vue.js] 체크박스 선택 시 효과주기 (0) | 2021.11.27 |
[Vue.js] checkbox, radio, select 값 가져오기 / 기본값 설정 (0) | 2021.11.17 |
[Vue.js] json 파일 읽어오기 (0) | 2021.11.17 |