当我尝试使用Class 1中的sendUserMessage()
时,出现content
未定义的错误。我知道这与this
有关,但我无法找到适合我情况的答案。
第1课:
@ViewChild(Content) content: Content;
sendUserMessage(message) {
this.class2object.sendMessageToBackend(message,this.createMessage);
}
createMessage(jsonMessage) {
this.content.scrollToBottom(300);
}
第2课:
sendMessageToBackend(ChatMessage: string, handler: Function) {
//build requests
var response: string;
var time = new Date().getTime();
var json = JSON.stringify({ message: ChatMessage, sessionID: "", timestamp: time });
var headers = new Headers();
headers.append("Content-Type", 'application/json');
// send request
this.http.post('http:somethhing.smth',
json, {
headers: headers
}).subscribe(data => {
response = JSON.parse(JSON.stringify(data.text()));
handler(response);
},
() => console.log("error")
);
}
注意:此处的方法已经过简化,以便更好地理解。
我收到错误EXCEPTION: Cannot read property 'content' of undefined
我知道一种解决方案是将Class 2中的方法移动到Class 1,但我真的会试着避免这种情况。
答案 0 :(得分:1)
使用箭头功能:
this.class2object.sendMessageToBackend(message, jsonMessage => this.createMessage(jsonMessage));
我建议您阅读这篇文章:Understanding "This" in JavaScript。
注意:闭包(我们的小箭头功能)has better performance而不是bind
功能。
答案 1 :(得分:0)
使用绑定功能
this.class2object.sendMessageToBackend(message, this.createMessage.bind(this));
希望有所帮助。