반응형
VueJS 커스텀 디렉티브 + import 이벤트
할 필요가 있다$emit
커스텀 디렉티브로부터의 이벤트가능합니까?
directive.directive:
vnode.context.$emit("myEvent") // nothing append
vnode.child.$emit("myEvent") // error
vnode.parent.$emit("myEvent") // error
요소.vue:
<div v-directive.modifier="binding" @myEvent="method()"></div>
그게 가능한지, 무슨 속임수가 있는지 아세요?
고마워요.
A <div>
이 아니다VueComponent
그 말은 즉, 이 시스템에는$emit
방법.
따라서 Vue 커스텀 디렉티브에서 이벤트를 내보내려면 먼저 몇 가지 검사를 수행해야 합니다.
- Vue 커스텀컴포넌트에서 디렉티브가 사용된 경우 해당 컴포넌트의 인스턴스를 호출합니다.
- 디렉티브가 일반 DOM 요소에서 사용된 경우(...가 존재하지 않기 때문에)
$emit()
...)를 사용하여 네이티브 DOM 이벤트를 디스패치합니다.
다행히 Vue's는v-on
청취자는 네이티브 커스텀이벤트에 응답합니다
그게 전부일 거야.이하의 데모 실장.
Vue.component('my-comp', {
template: `<input value="click me and check the console" size="40">`
});
Vue.directive('my-directive', {
bind: function (el, binding, vnode) {
// say you want to execute your logic when the element is clicked
el.addEventListener('click', function (e) {
var eventName = 'my-event';
var eventData = {myData: 'stuff - ' + binding.expression}
if (vnode.componentInstance) {
vnode.componentInstance.$emit(eventName, {detail: eventData}); // use {detail:} to be uniform
} else {
vnode.elm.dispatchEvent(new CustomEvent(eventName, {detail: eventData}));
}
})
}
})
new Vue({
el: '#app',
methods: {
handleStuff(e) { console.log('my-event received', e.detail); }
}
})
<script src="https://unpkg.com/vue@2.5.15/dist/vue.min.js"></script>
<div id="app">
<div v-my-directive.modifier="'native element'" @my-event="handleStuff">CLICK ME AND CHECK THE CONSOLE</div>
<hr>
<my-comp v-my-directive.modifier="'custom component'" @my-event="handleStuff"></my-comp>
</div>
언급URL : https://stackoverflow.com/questions/49264426/vuejs-custom-directive-emit-event
반응형
'programing' 카테고리의 다른 글
One-past-malloc을 가리키는 포인터를 사용하는 것이 잘 정의되어 있습니까? (0) | 2022.08.13 |
---|---|
제공/주입된 VUE 컴포넌트를 유닛 테스트하는 방법 (0) | 2022.08.11 |
Vue에서 대화 상자가 완료될 때까지 선택 양식을 변경하지 않도록 하는 방법 (0) | 2022.08.11 |
C 구조체의 부재 숨기기 (0) | 2022.08.11 |
O(1)의 reducx/vuex 저장소의 요소를 업데이트하려면 어떻게 해야 합니까? (0) | 2022.08.11 |