$ emit无法通过匿名函数运行

时间:2019-07-26 12:21:53

标签: vue.js anonymous-function

在挂接的钩子中,我具有以下匿名功能:

window.onkeydown = function(evt) {
  evt = evt || window.event;

  var isEscape = false;

  if ("key" in evt) {
     isEscape = evt.key === "Escape" || evt.key === "Esc";
  } else {
    isEscape = evt.keyCode === 27;
  }

  if (isEscape) {
    this.$emit("close");
  }
};

但是,当按下esc按钮时,出现以下错误:

  

app.js:2033 Uncaught TypeError:this。$ emit不是一个函数       在window.onkeydown(app.js:2033)

我该如何解决?

1 个答案:

答案 0 :(得分:3)

function关键字为此创建了一个新的上下文。要在函数中使用此关键字,可以bind,将其分配给var self = this之类的另一个变量,也可以使用不创建新上下文的箭头函数。

window.onkeydown = evt => 
{ 
  evt = evt || window.event;
  var isEscape = false;
  if ("key" in evt) {
    isEscape = evt.key === "Escape" || evt.key === "Esc";
  } else {
    isEscape = evt.keyCode === 27;
  }

  if (isEscape) {
    this.$emit("close");
  }
};