Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与vue和addEventListener中的数据或方法通信_Javascript_Vue.js - Fatal编程技术网

Javascript 与vue和addEventListener中的数据或方法通信

Javascript 与vue和addEventListener中的数据或方法通信,javascript,vue.js,Javascript,Vue.js,我无法使用此代码与我的数据或方法通信 created() { document.addEventListener( 'touchstart', function( e ) { this.myData = e.changedTouches[ 0 ].screenY } } 我猜这是因为函数的作用域。这在函数内部不起作用,但是我如何与数据通信或激活事件侦听器函数之外的任何方法呢?你是对的,这是因为回调中的绑定没有指向vue实例 要解决此问题,请在指向vue实例的已创建挂钩中定义变量

我无法使用此代码与我的数据或方法通信

created() {
  document.addEventListener( 'touchstart', function( e ) {
    this.myData = e.changedTouches[ 0 ].screenY
  }
}

我猜这是因为函数的作用域。这在函数内部不起作用,但是我如何与数据通信或激活事件侦听器函数之外的任何方法呢?

你是对的,这是因为回调中的
绑定没有指向vue实例

要解决此问题,请在指向vue实例的已创建挂钩中定义变量
var self=this
,并在回调中使用
self
引用数据属性

created() {
  var self = this;
  document.addEventListener( 'touchstart', function( e ) {
    self.myData = e.changedTouches[ 0 ].screenY
  })
}
现在,由于回调函数在变量
self
上有一个闭包,因此它在被调用时引用vue实例

另一种选择是,您可以使用箭头函数,按如下方式按词汇绑定

created() {
  document.addEventListener( 'touchstart', ( e ) => {
    this.myData = e.changedTouches[ 0 ].screenY
  })
}

在这之后我觉得很傻。。。实际上,我尝试将其传递到函数中,出现了各种各样的错误,等等。。。当我可以在外面读取变量时。谢谢你的帮助!哦,哇,箭头功能实际上更好,我不知道它可以这样使用。美好的很难找到解决方案,谢谢!!使用箭头函数解决了我的问题