<div :class="{ active: isActive }"></div>
<div
class="static"
:class="{ active: isActive, 'text-danger': hasError }"
></div>
<div :class="classObject"></div>
data() {
return {
classObject: {
active: true,
'text-danger': false
}
}
}
data() {
return {
isActive: true,
error: null
}
},
computed: {
classObject() {
return {
active: this.isActive && !this.error,
'text-danger': this.error && this.error.type === 'fatal'
}
}
}
배열 구문
<div :class="[activeClass, errorClass]"></div>
data() {
return {
activeClass: 'active',
errorClass: 'text-danger'
}
}
스타일 바인딩
v-if
<h1 v-if="awesome">Vue is awesome!</h1>
<h1 v-else>Oh no 😢</h1>
template 태그
v-show
<h1 v-show="ok">Hello!</h1>
v-show
를 쓴 엘리먼트의 경우, 항상 렌더링 되어 DOM에 남아있다는 점입니다. v-show
는 단순히 엘리먼트의 CSS display
속성만을 전환합니다.v-show
는 <template>
엘리먼트를 지원하지 않으며, v-else
와 함께 쓸 수 없습니다.
v-if
대v-show
v-if
는 "실제(real)" 조건부 렌더링입니다. 전환 도중 조건부 블록 내부의 이벤트 리스너 및 자식 컴포넌트들이 올바르게 제거되고 다시 생성되기 때문입니다.
또한 v-if
는 게으릅니다(lazy). 초기 렌더링 시, 조건이 거짓(false)이면 아무 작업도 하지 않습니다. 조건부 블록은 조건이 처음으로 참(true)이 될 때까지 렌더링되지 않습니다.
이에 비해 v-show
는 훨씬 간단합니다. 엘리먼트는 CSS 기반 전환으로 초기 조건과 관계 없이 항상 렌더링됩니다.
(역자 주: v-show는 엘리먼트를 DOM에 우선 렌더링하고 조건에 따라 CSS display:block/display:none 속성을 전환합니다.)
일반적으로 v-if
는 전환 비용이 높은 반면, v-show
는 초기 렌더링 비용이 높습니다.
그러므로 무언가를 자주 전환해야 한다면 v-show
를 사용하는 게 좋고, 런타임 시 조건이 변경되지 않는다면 v-if
를 사용하는 게 더 낫습니다.
일단 v-if를 사용하고 전환비용이 많이 들어갈 것(자주 사용할 것) 같으면 v-show로 바꿔주기.!
:key
는 고유하게 구별할 수 있는 값으로 설정.
npm i -D shortid
배열 변경 감지
변이 메소드
push()
: 배열 맨 뒤에 값 추가pop()
: 배열 맨 뒤에 값 빼기shift()
: 배열 맨 앞에 값 추가unshift()
: 배열 맨 앞 값 빼기splice()
: 인덱스를 이용해서 데이터 넣거나 빼거나sort()
: 배열 정렬reverse()
: 배열 뒤집기.콘솔을 열고 변형 메소드를 호출하여 이전의 예제의 items
배열로 사용할 수 있습니다.예: example1.items.push({ message: 'Baz' })
.
배열 교체
이로 인해 Vue가 기존 DOM을 버리고 전체 목록을 다시 렌더링할 것이라고 생각할 수 있습니다. 다행히도 그렇지 않습니다. Vue는 DOM 요소 재사용을 최대화하기 위해 몇 가지 smart heuristics(스마트 휴리스틱, 과학적인 조건보다는 경험이나 직관에 의해 똑똑하게 의사결정을 하는 방식)을 구현하므로, 배열을 겹치는 객체를 포함하는 다른 배열로 교체하는 것은 매우 효율적인 작업입니다.