写在打字稿中,我有这个:
export class EventDiscussionPage {
messages: any = []
private _channel: any;
initChat() {
this._channel.on('messageAdded', function(message) {
this.messages.push(message);
}
}
}
添加邮件后,我会收到cannot read property 'push' of undefined
。我想我有一个范围问题 - 如何将邮件添加到this.messages
?
答案 0 :(得分:3)
您可以使用ES6 lambda,而不是使用函数闭包导致重新赋值的函数close over。
你得到类似的东西
this._channel.on('messageAdded', (message) => this.messages.push(message));
有关Javascript中this
范围的更多信息,请访问How to access the correct `this` inside a callback?
答案 1 :(得分:3)
您有一个范围问题。使用上下文:
export class EventDiscussionPage {
messages: any = []
private _channel: any;
initChat() {
var ctx = this;
this._channel.on('messageAdded', function(message) {
ctx.messages.push(message);
}
}
}
你所指的this
是" _channel",你基本上需要携带来自父母的引用来正确地调用它。
您还可以使用箭头函数语法来避免这种情况(因为它会延续父项的上下文):
export class EventDiscussionPage {
messages: any = []
private _channel: any;
initChat() {
this._channel.on('messageAdded',(message) => {
this.messages.push(message);
}
}
}