我想尽可能地抽象表单控件到 vuejs 的绑定。这个想法是创建一个指令,该指令将绑定跟踪表单字段发生的情况所需的所有事件。
所以不要这样做:
<input type="text" name="firstName"
v-model="form.firstName.value"
@blur="form.firstName.onBlur"
@focus="form.firstName.onFocus"
@change="form.firstName.onChange"
[...]
/>
只需这样做:
<input type="text" name="firstName" v-form-control="form.firstName" />
让指令发挥作用。
但我找不到从指令中向输入添加指令的方法FormControl
。
我可以做这样的事情:
Vue.directive('form-control', {
bind: function(el: HTMLElement, binding: DirectiveBinding) {
const formControl: FormControl = binding.value;
el.addEventListener('input', (event) => {
formControl.updateValue(event.target.value);
});
},
});
但是这样下去我从 VueJS 中损失了很多。我手动附加了一个input
不太兼容的事件,并且肯定会比v-model
指令更频繁地失败。
你知道一种将原始 vue 指令和事件从指令的方法附加到元素的bind
方法吗?
谢谢你的帮助!