javascript - VUE-指令中的事件监听器无法读取方法中定义的函数

标签 javascript vue.js data-visualization

我希望在“方法”中定义的函数在以下情况下执行 我的元素被点击。但是,我的事件监听器仅在我使用匿名函数(例如

)时才执行某些操作
el.addEventListener('click' function() {console.log('hi'))

当我在方法中设置函数时,它会发出错误消息

vue.js?3de6:634 [Vue warn]: Error in directive myDirective bind hook: "ReferenceError: sizechange is not defined"

found in

---> at /Users/soonkpaik/Downloads/Start 2/src/App.vue my code is as below.

<template>
    <div class="container">
        <div class="row">
            <div class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3">
                <h1 v-myDirective:sizechange='{ inisize:100, finsize:500, color:"pink", blinkcolor:"red" }'>Directives Exercise!</h1>
                <!-- Exercise -->
                <!-- Build a Custom Directive which works like v-on (Listen for Events) -->

            </div>
        </div>
    </div>
</template>

<script>
    export default {
     directives:{  myDirective:{
                bind(el,binding,vnode){




                    let maincolor=binding.value.color;
                    let newcolor=binding.value.blinkcolor;        
                    let currentcolor=maincolor;

                    setInterval( ()=>{
                         currentcolor==newcolor? currentcolor=maincolor : currentcolor=newcolor

                         el.style.backgroundColor=currentcolor 
                    },500)

                     el.addEventListener('click',sizechange)






            }

        }
    },
       methods:{

        sizechange() {
            console.log('hi')

        }
    },
    }
</script>

<style>
</style>

我做错了什么?? 预先感谢您。

最佳答案

这里的问题是 sizechange() 函数无法直接在 bind hook function 内部访问直接地。您需要引用当前的vnode上下文如:

export default {
  directives: {
    myDirective: {
      bind(el, binding, vnode) {
      
        // Your logic here...
                    
        var vm = vnode.context;
        el.addEventListener('click', vm.sizechange) // This works fine now
      }    
    }
  },
  methods: {
    sizechange() {
      console.log('hi')    
    }
  },
}

关于javascript - VUE-指令中的事件监听器无法读取方法中定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61515932/

相关文章:

javascript - IE8 支持哪些 Javascript 版本?

javascript - 如何在 VueJS 中格式化数字

python - 如何制作与数据帧中的一系列值相对应的不同散点大小和颜色的散点图?

r - R的ASCII绘图功能

r - 我可以在R的ggplot2中使用晶格中的带状疱疹吗

javascript - #JSON 到 #Vuex 存储

javascript - 如何通过 jquery 传递 'this' 元素。 ('click' ) 到内部函数

javascript - 当我使用 javascript 从网站保存图像时,如何将图像保存在我想要的本地路径中?

javascript - 在鼠标悬停时删除 Vue 自定义过滤器

vue.js - 使用对象通过 v-for 生成选择选项