0

我正在将MaterializeCSS 的自动完成功能Angular2-Materialize一起使用,并且我正在尝试将选定的值推送到一个数组中。但是,我收到以下错误:

Cannot read property 'push' of undefined

这是我的组件:

public items: any[] = [];

addItem() {
  $('.autocomplete-content').on('click', 'li', function () {
    let value = $(this).text().trim();
    this.items.push({ [value]: true });
  });
}

如果我尝试push在函数之外做一些随机的事情jQuery,它会起作用。

这是我的 HTML:

<input type="text" (change)="addItem()" materialize="autocomplete" [materializeParams]="[{'data': myData | async}]">
4

1 回答 1

3

this在您的函数中是指单击的元素,而不是您的类的范围。所以要么使用箭头功能

 $('.autocomplete-content').on('click', 'li', ev => {
    let value = $(ev.target).text().trim();
    this.items.push({ [value]: true });
  });

或者bind(this)让类' this 在click处理程序中可用

 $('.autocomplete-content').on('click', 'li', function (ev) {
    let value = $(ev.target).text().trim();
    this.items.push({ [value]: true });
  }.bind(this));

请注意更改$(this)为可以传递给函数的元素。

您也可以定义类似thatinaddItem()并使用它来代替......

addItem() {
  var that = this;  
  $('.autocomplete-content').on('click', 'li', function () {
    let value = $(this).text().trim();
    that.items.push({ [value]: true });
  });
}
于 2016-11-19T00:41:59.913 回答