在Vue.js

时间:2017-08-24 20:58:09

标签: javascript events vue.js bind addeventlistener

我对Vue.js很新。最近,我遇到了将键盘事件附加/分离到我的一个组件内的窗口的问题。以下是我的方法:

created() {
  this.initHotkeys();
},

beforeDestroy() {
  this.discardListeners();
},

methods: {
  initHotkeys() {
    window.addEventListener('keyup', this.processHotkey.bind(this));
    window.addEventListener('keydown', this.removeDefaultBehavior.bind(this));
  },

  discardListeners() {
    window.removeEventListener('keyup', this.processHotkey.bind(this));
    window.removeEventListener('keydown', this.removeDefaultBehavior.bind(this));
  },

....

事件附加和启动没有任何问题。但是,当我切换组件时,事件仍然保持附加到窗口。经过一系列尝试后,我发现如果从所有回调中删除.bind(this)部分,事件就会成功分离。

有人可以解释一下为什么会这样吗?

提前谢谢!

1 个答案:

答案 0 :(得分:4)

.bind(this)会返回一个新功能。

this.processHotkey.bind(this) === this.processHotkey.bind(this)
// => false

这就是为什么删除听众并不起作用的原因。幸运的是,这种绑定不是必需的,因为组件方法已经绑定了。

所以只需删除它。