doommm
2020-05-24 12:35:42 +08:00
下面这么写似乎是可以的,不知道有没有更好的办法
```
<template>
<div>
<div v-copy="text">
{{ text }}
</div>
<input type="text" v-model="text" />
</div>
</template>
<script>
export default {
name: 'LabelSmall',
directives: {
copy: {
bind(el, binding) {
const copy = {};
Reflect.defineProperty(el, '__copy__', { value: copy });
copy.value = binding.value;
const fn = () => {
console.log('val', copy.value);
};
copy.cb = fn;
el.addEventListener('click', fn);
},
componentUpdated(el, binding) {
const copy = Reflect.get(el, '__copy__');
copy.value = binding.value;
},
unbind(el, binding) {
const copy = Reflect.get(el, '__copy__');
el.removeEventListener('click', copy.cb);
Reflect.deleteProperty(el, '__copy__');
},
},
},
data() {
return {
text: 'small',
};
},
};
</script>
```