Front-end 개발/JAVASCRIPT

Vue directive - 버튼 외 다른 영역 클릭 시 함수 실행 테스트

별의 노트 2023. 1. 27. 11:48
반응형

Vue directive - 버튼 외 다른 영역 클릭 시 함수 실행 테스트

 

1. main.js 에 사용할 Vue directive 함수 추가

Vue.directive("click-outside", {
  bind: function (el, binding, vnode) {
    el.clickOutsideEvent = function (event) {
      if (!(el == event.target || el.contains(event.target))) {
        vnode.context[binding.expression](event);
      }
    };
    document.body.addEventListener('click', el.clickOutsideEvent)
  },
  unbind: function (el) {
    document.body.removeEventListener('click', el.clickOutsideEvent)
  },
});

 

 

2. 적용할 버튼에 해당 directive 추가

버튼 영역 외 다른 부분 클릭 시 outsideEvent 함수가 실행됨

<template>
    <div>
        <button type="button" v-click-outside="outsideEvent"></button>
    </div>
</template>

<script>
export default {
  props: {},
  data() {
    return {};
  },
  mounted() {},
  methods: {
    outsideEvent() {
    	// 버튼 외 다른 영역 클릭 시 함수 실행
    },
  },
};
</script>