【发布时间】:2021-03-22 13:41:12
【问题描述】:
我有一个指令可以更新元素在其内容更改时的外观。因此,我需要它在其原生 change 事件触发时以及首次设置元素时运行。所以我在bind 钩子和componentUpdated 钩子中运行我的函数。
所以它的结构看起来像这样:
directives: {
demo: {
bind(el) {
el.addEventListener('change', () => {
alert('i am a directive function');
});
},
componentUpdated(el) {
alert('i am a directive function');
}
}
}
它工作正常,但我必须在两个钩子声明中复制并粘贴函数,我想摆脱它。
我想也许指令声明可以有它的本地属性,可以通过this 访问,所以我尝试这样解决它:
directives: {
demo: {
myFunction: () => {
alert('i am a directive function');
},
bind(el) {
el.addEventListener('keyup', () => this.myFunction());
},
componentUpdated(el) {
this.myFunction();
}
}
}
但这不起作用,说this.myFunction 不是一个函数。
我将如何进行这项工作?
【问题讨论】:
-
我只是将指令之外的
myFunction移动到一个可以在任何地方调用的独立函数中。例如,function myFunction() { ... },然后在需要的地方使用myFunction()。 -
这听起来不像是一个非常分离关注点的事情。理想情况下,我希望指令是一种即插即用且易于重复使用的指令。
-
嗯,我一定错过了什么。为什么外部功能会排除即插即用或可重用性?我在下面的回答(选项 2)证明了我的建议。
标签: vue.js vuejs2 vue-directives