在回调中,Typescript引用了这一点

时间:2016-12-16 13:08:04

标签: angular typescript this ionic2

当我尝试使用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,但我真的会试着避免这种情况。

2 个答案:

答案 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));

希望有所帮助。