【问题标题】:Add VueJS directive dynamically from within another directive从另一个指令中动态添加 VueJS 指令
【发布时间】:2019-12-29 23:53:03
【问题描述】:

我想尽可能抽象出表单控件与 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 方法附加到元素的方法吗?

感谢您的帮助!

【问题讨论】:

    标签: javascript typescript vue.js vuejs2 vue-directives


    【解决方案1】:

    最初的 Vue 指令实际上是事件处理程序。 V-model 是 :value=".."@input=".." 周围的语法糖。

    因此,继续为常规 dom 事件(输入、模糊、焦点、更改)附加事件侦听器

    为了被 JavaScript 运行时理解,Vue 指令被翻译成常规的事件监听器——它们在运行时不存在,因此,你不能在运行时动态地使用它们的语法。

    【讨论】:

      猜你喜欢
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 2018-01-06
      相关资源
      最近更新 更多