Vue自定义指令中无法获取this

问题:

最近在使用自定义指令时遇到一个问题,我想在指令里通过this直接去访问vue实例数据,但是显示未定义,经大佬提醒,里面的this很可能不是指向vue实例
在这里插入图片描述
在这里插入图片描述

解决方法:

在函数里增加第三个参数vnode,vnode.context就是指向当前的vue实例
在这里插入图片描述

总结:

指令里的this不是指向vue实例,可以使用vnode.context获取this

自定义指令可传入以下参数:

el:指令所绑定的元素,可以用来直接操作 DOM。
binding:一个对象,包含以下 property:

name:指令名,不包括 v- 前缀。
value:指令的绑定值,例如:v-my-directive=“1 + 1” 中,绑定值为 2。
oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
expression:字符串形式的指令表达式。例如 v-my-directive=“1 + 1” 中,表达式为 “1 + 1”。
arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 “foo”。
modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。

vnode:Vue 编译生成的虚拟节点。
oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue,你可以使用自定义指令来抛出事件。下面是一个简单的例子: 首先,在Vue组件定义一个自定义指令: ```javascriptVue.directive('custom-directive', { bind: function (el, binding, vnode) { // 绑定事件处理逻辑 el.addEventListener('click', function () { // 触发自定义事件 vnode.context.$emit('custom-event', binding.value); }); } }); ``` 然后,在模板使用自定义指令,并监听自定义事件: ```html<template> <div v-custom-directive="dataValue"></div> </template> <script> export default { data() { return { dataValue: 'Hello, World!' }; }, mounted() { this.$on('custom-event', this.handleCustomEvent); }, methods: { handleCustomEvent(value) { console.log('Received custom event:', value); // 处理自定义事件逻辑 } } }; </script> ``` 在上述代码,当 `<div>` 元素被点击时,会触发自定义指令的 `bind` 方法的事件处理逻辑。然后,通过 `vnode.context.$emit` 方法触发了一个名为 `'custom-event'` 的自定义事件,并传递了 `binding.value`(即 `dataValue`)作为参数。接着,在组件的 `mounted` 钩子函数,通过 `this.$on` 方法监听了 `'custom-event'`事件,并绑定了处理函数 `handleCustomEvent`。最后,可以在 `handleCustomEvent` 方法处理自定义事件的逻辑。 这样,当 `<div>` 元素被点击时,就会触发自定义事件,并将传递的参数打印到控制台。你可以根据实际需求修改自定义指令和事件处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值