我正在使用MaterializeCSS's autocomplete和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}]">
答案 0 :(得分:3)
this
是指被点击的元素,而不是您的类&#39;范围。所以要么使用arrow function
$('.autocomplete-content').on('click', 'li', ev => {
let value = $(ev.target).text().trim();
this.items.push({ [value]: true });
});
或bind(this)
制作课程&#39;这在click
处理程序
$('.autocomplete-content').on('click', 'li', function (ev) {
let value = $(ev.target).text().trim();
this.items.push({ [value]: true });
}.bind(this));
注意将$(this)
更改为可以传递给函数的元素。
您还可以在that
中定义类似addItem()
的内容,然后使用它来代替......
addItem() {
var that = this;
$('.autocomplete-content').on('click', 'li', function () {
let value = $(this).text().trim();
that.items.push({ [value]: true });
});
}