Vue自定义指令里怎么获取组件实例?
我在写一个 Vue 3 的自定义指令,想在指令的钩子里访问当前组件的实例(比如调用组件的方法),但试了 binding.instance 却是 undefined,这是为啥?
我用的是 Composition API + setup() 写法,指令注册在局部组件里,代码大概是这样:
const myDirective = {
mounted(el, binding) {
console.log(binding.instance); // 输出 undefined
}
};
是不是在 setup 里不能这么用?那该怎么拿到组件实例或者调用 setup 里定义的方法呢?
不过有个更优雅的解决方案:用
getCurrentInstance。在setup里把实例或方法暴露给指令就行。比如:更好的写法是把方法单独传过去,而不是整个实例:
这样更干净,也避免了暴露不必要的实例属性。Vue3的指令设计本来就是推荐通过binding.value来传数据的。
(小声BB:有时候觉得Vue3的指令比Vue2难用多了...)