input focus용 directive 만들기 예시


가끔 모달 창이나, 페이지 접근 시 특정 인풋에 포커스 해달라는 요청이 있다.
기존에는 그때그때 el에 접근하여 처리했는데, 별도 directive를 만들어서 처리하면 편하기에 메모해놓는다.

Vue3 방식

커스텀 디렉티브 생성

const { createApp, onMounted } = Vue;
const app = createApp({})
app.directive('focus', {
  mounted(el) {
    el.focus()
  }
  // 기타 directive가 동작할 다른 라이프 사이클 추가
})

사용 예시

<script src="https://unpkg.com/vue@next"></script>

<div id="app">
    <input />
    <input v-focus />
    <input />
</div>

Nuxt3 방식

커스텀 디렉티브 생성 (플러그인)

export default defineNuxtPlugin((nuxtApp) => {
    nuxtApp.vueApp.directive('focus', {
        mounted(el, binding) {
            if (!binding.hasOwnProperty('value') || binding.value) {
                el.focus()
            }
        }
    })
})

사용 예시 (동적 포커싱)

<script src="https://unpkg.com/vue@next"></script>

<div id="app">
    <input />
    <input v-focus="true" />
    <input />
</div>

nuxt.config.ts

// 플러그인 정보를 등록해준다.
plugins: [{ src: '@/plugins/vue-focus.js', mode: 'all' }],