์ฐธ๊ณ ํ ์ฌ์ดํธ
v3.vuejs-korea.org/ko-kr/guide/custom-directive.html
1. ์ฌ์ฉ์ ์ง์ ๋๋ ํฐ๋ธ
Vue๋ ์ฝ์ด์ ํฌํจ๋ ๊ธฐ๋ณธ ๋๋ ํฐ๋ธ ์ธํธ ์ธ์๋ ์ฌ์ฉ์ ์ ์ ๋๋ ํฐ๋ธ๋ฅผ ๋ฑ๋กํ ์ ์๋ค.
1) ๋๋ ํฐ๋ธ ๋ฑ๋ก ๋ฐฉ๋ฒ
์ฌ์ฉ์ ์ง์ ๋๋ ํฐ๋ธ๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- ์ ์ญ์ผ๋ก ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ
- ๋ก์ปฌ ๊ฒํฌ๋ํธ์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ
์ ์ญ ์ ์ธ
Vue ์ธ์คํด์ค ์ ์ธํ๊ธฐ ์ ์ Vue.directive ์ ์ญ ๋ฑ๋ก์ ์์ผ์ค๋ค.
// ์ ์ญ ์ฌ์ฉ์ ์ ์ ๋๋ ํฐ๋ธ v-focus ๋ฑ๋ก
Vue.directive('focus', {
// ๋ฐ์ธ๋ฉ ๋ ์๋ฆฌ๋จผํธ๊ฐ DOM์ ์ฝ์
๋์์ ๋...
inserted: function (el) {
// ์๋ฆฌ๋จผํธ์ ํฌ์ปค์ค๋ฅผ ์ค๋๋ค
el.focus()
}
})
์ง์ญ ์ ์ธ
์ง์์ด๋ฅผ ๋ก์ปฌ๋ก ๋ฑ๋กํ๊ธฐ ์ํด์ ์ปดํฌ๋ํธ๋ directives ์ต์ ์ ํ์ฉํ๋ฉด ๋๋ค.
directives: {
focus: {
// ๋๋ ํฐ๋ธ ์ ์
inserted: function (el) {
el.focus()
}
}
}
2) ๋ฑ๋กํ ๋๋ ํฐ๋ธ ์ฌ์ฉ
ํ ํ๋ฆฟ์์ ๋ค์๊ณผ ๊ฐ์ด ๋ชจ๋ ์์์์ ์๋กญ๊ฒ ์ง์ ํด์ค ๋๋ ํฐ๋ธ์ธ v-focus ์์ฑ์ ์ฌ์ฉํ ์ ์๋ค.
<input v-focus>
2. ํ ํจ์
๋๋ ํฐ๋ธ ์ ์ ๊ฐ์ฒด๋ ์ฌ๋ฌ๊ฐ์ง ํ ํจ์(์ ํ์ฌํญ)๋ฅผ ์ ๊ณตํ๋ค.
ํ ํจ์ | ์ค๋ช |
beforeMount | ๋๋ ํฐ๋ธ๊ฐ ์ฒ์ ์๋ฆฌ๋จผํธ์ ๋ฐ์ธ๋ฉ ๋๊ณ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋๊ธฐ์ ์ ํธ์ถํฉ๋๋ค. ์ด๊ณณ์์ ํ๋ฒ ์คํ๋๋ ์ด๊ธฐ ์ธํ ์ ํ ์ ์์ต๋๋ค. |
mounted | ๋ฐ์ธ๋ฉ๋ ์์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋ ํธ์ถ๋ฉ๋๋ค. |
beforeUpdate | ํฌํจ๋ ์ปดํฌ๋ํธ์ VNode๊ฐ ๊ฐฑ์ ๋๊ธฐ ์ ์ ํธ์ถ์ด ๋ฉ๋๋ค. |
updated | ํฌํจ๋ ์ปดํฌ๋ํธ์ VNode ๊ทธ๋ฆฌ๊ณ ์ปดํฌ๋ํธ์ ์์๋ค์ VNodes๋ค์ด ์ ๋ฐ์ดํธ ๋๊ณ ๋๋ค์ ํธ์ถ๋ฉ๋๋ค. |
beforeUnmount | ๋ฐ์ธ๋ฉ๋ ์์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํฐ๋๋๊ธฐ ์ ์ ํธ์ถ๋ฉ๋๋ค. |
unmounted | ์์๋ก๋ถํฐ ๋๋ ํฐ๋ธ๊ฐ ์ธ๋ฐ์ธ๋ ๋ ๋ ๊ทธ๋ฆฌ๊ณ ๋ถ๋ชจ ์ปดํฌ๋ํธ ๊ฐ ์ธ๋ง์ดํธ๋ ๋, ํ๋ฒ ํธ์ถ๋ฉ๋๋ค. |
Custom Directive API์์ ์ด๋ฌํ ํ ๋ค์ ์ ๋ฌ๋ ์ธ์๋ค์ ํ์ธํ ์ ์๋ค.
'๐ปWEB FrontEnd > ํ๋ ์์ํฌ Vue' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฌ์ฌ์ฉ & ์ปดํฌ์ง์ (1) - ๋ฏน์ค์ธ (0) | 2021.02.26 |
---|---|
์ธ๋ผ์ธ ์คํ์ผ ๋ฐ์ธ๋ฉ (0) | 2021.02.25 |
ํด๋์ค ๋ฐ์ธ๋ฉ (0) | 2021.02.25 |
v-model ๋ฐ์ธ๋ฉ (0) | 2021.02.25 |
CSR์ SSR์ ์ฅ๋จ์ (0) | 2021.02.08 |