
Vue.js 뽀개기 (12) 커스텀 디렉티브
vue
2019.06.15.
본 글은 Udemy에서 제공하는 유료 강좌인 Vue.js Complete Guide를 수강하면서 정리한 내용입니다. 저작권 문제시 바로 글을 내리도록 하겠습니다.
Vue에서는 DOM 엘리먼트를 조작하기위해 v-디렉티브를 사용합니다. 그런데 기본으로 제공되는 디렉티브 이외에 사용자가 정의하는 디렉티브를 만들 수는 없을까요?
아래에서는 사용자 정의 디렉티브 적용 방법과 사용법에 대해 요약합니다.
커스텀 디렉티브는 언제 사용합니까?
- 기본으로 제공되는 디렉티브외에 DOM 엘리먼트를 내가 원하는대로 조작하고 싶을때
커스텀 디렉티브 적용 방법
- 전역 사용 혹은 로컬 사용
전역 사용
main.js파일에 작성Vue.directive('custom_directive', { })와 같은 형태로 커스텀 디렉티브 정의
로컬 사용
- 각 컴포넌트 파일에 작성
- 인스턴스에
directives{ custom_directive: { }}를 정의
디렉티브 만들기
- 커스텀 디렉티브는 5가지의 훅 함수 와 3가지의 훅 전달인자 가 있음
- 훅 함수는 선택사항
- 훅 전달인자는 3개 모두 pass를 해주되, 정의는 선택사항
5가지 Hooks (훅 함수)
bind- 디렉티브가 처음 바인딩 될 때, 1번 호출됨
- 필수 전달 인자
elbinding= 수정 금지vnode= 수정 금지
inserted- 디렉티브가 적용된 엘리먼트가 부모 노드에 삽입 되었을 때 호출
- 부모 노드의 존재 보장
- 필수 전달 인자
elbindingvnode
- 디렉티브가 적용된 엘리먼트가 부모 노드에 삽입 되었을 때 호출
update- 적용된 엘리먼트를 포함한 컴포넌트가 업데이트된 후 호출
- 자식 업데이트는 확인 안함
- 필수 전달 인자
elbindingvnodeoldVnode
- 적용된 엘리먼트를 포함한 컴포넌트가 업데이트된 후 호출
componentUpdated- 적용된 엘리먼트를 포함하는 컴포넌트 + 자식 컴포넌트들이 업데이트 된 후 호출
- 필수 전달 인자
elbindingvnodeoldVnode
unbind- 디렉티브가 엘리먼트에서 적용이 해제 될 때 1번 호출
- 필수 전달 인자
elbindingvnode
3가지 Passing Arguments (훅 전달인자)
el- 디렉티브가 바인딩 할 엘리먼트
binding은 6가지 속성을 가진 객체name- 디렉티브의 이름을 정의 (
v-없이 이름만!)
- 디렉티브의 이름을 정의 (
value- 디렉티브에서 전달받은 값
oldValue- 이전 값
update및componentUpdated에서만 사용 가능
expression- 표현식 문자열
arg- 디렉티브 전달인자 (있는 경우만 존재)
modifiers- 포함된 수식어 객체
vnode- Vue 컴파일러가 만든 버추얼 노드
- 아직 뭔말인지 모르겠음…
oldVnode- 이전의 버추얼 노드
update및componentUpdated에서만 사용 가능
주의사항
- 모든 전달인자는 읽기 전용으로 사용! (변경 금지)
사용예시 1. 배경색 적용
// 전역 등록 방법입니다.
Vue.directive('highlight', {
bind(el, binding, vnode) {
el.style.backgroundColor = binding.value
},
})<!-- 아래의 문단에 배경색 적용 -->
<p v-highlight:background="red">Hello World</p>사용예시 2. 배경색 및 글씨색 적용
// 전역 등록 방법입니다.
// background에 바인딩하면 배경색 적용
// 그렇지 않으면 글씨색을 적용
Vue.directive('highlight', {
bind(el, binding, vnode) {
if (binding.arg == 'background') {
el.style.backgroundColor = binding.value
} else {
el.style.color = binding.value
}
},
})<!-- 아래의 문단에 글씨색 적용 -->
<p v-highlight="red">Hello World</p>사용예시 3. 수식어 사용
// 전역 등록 방법입니다.
// 3초의 딜레이 후에 색 변경
Vue.directive('highlight', {
bind(el, binding, vnode) {
var delay = 0
if (binding.modifiers['delayed']) {
delay = 3000 // 3초 딜레이
}
setTimeout(() => {
if (binding.arg == 'background') {
el.style.backgroundColor = binding.value
} else {
el.style.color = binding.value
}
})
},
})<!-- 아래의 문단에 글씨색 적용 -->
<p v-highlight:background.delayed="red">Hello World</p>사용예시 4: 다중 수식어 적용
- 추후 정리 예정
Vue에서는 훅 함수와 훅 전달인자를 통해 사용자가 원하는 디렉티브를 만드는데 도움을 줍니다.
조금 복잡할 수도 있지만, 대부분의 경우에 훅 전달인자는 el과 binding만 주로 사용한다고 기억하시면 될 듯 합니다.
다음 글에서는 Vue-router, Vuex, Vuetify와 같은 라이브러리를 Vue 인스턴스에 전역으로 제공하는 플러그인에 대해 요약하려고 합니다.
틀린 내용이 있다면 자유롭게 댓글로 달아주세요 :)
Thank You for Visiting My Blog, Have a Good Day 😆
© ChansNotes Powered By Gatsby
© ChansNotes Powered By Gatsby