javascript / expert
Snippet
WeakMap-gestützte benutzerdefinierte Vue-Direktive für entkoppelte Ereignis-Streams
Die Verwendung einer WeakMap zur Verknüpfung von DOM-Elementen mit internen Handler-Closures in benutzerdefinierten Vue-Direktiven garantiert eine speichersichere Event-Binding-Lebenszyklus-Steuerung ohne Manipulierung von DOM-Elementeigenschaften.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const directiveStates = new WeakMap();export const vEventStream = {mounted(el, binding) {const handler = (event) => {if (binding.value && typeof binding.value === 'function') {binding.value(event);}};directiveStates.set(el, handler);el.addEventListener(binding.arg || 'click', handler);},unmounted(el, binding) {const handler = directiveStates.get(el);if (handler) {el.removeEventListener(binding.arg || 'click', handler);directiveStates.delete(el);}}};
vue
Erklärung
1
const directiveStates = new WeakMap();
Speichert Zustandsreferenzen nach DOM-Knoten-Instanzen, ohne die Garbage Collection zu behindern.
2
directiveStates.set(el, handler);
Verknüpft die spezifische Event-Listener-Closure mit dem Ziel-DOM-Element.
3
el.removeEventListener(binding.arg || 'click', handler);
Entfernt die Listener-Referenz beim Unmounten sauber, um potenzielle Speicherlecks zu eliminieren.