0

I am trying to call a function inside the jQuery function. But i am unable use 'this' scope, because it refers to the HTMLElement.

import { Component, Input } from '@angular/core';
import { Injectable }     from '@angular/core';
import * as $ from 'jquery';

@Injectable()
export class ChatService {
   public chatObj : SomeChatObject;

    constructor() { }
    disconnect(){
       console.log("Chat Disconnected");
    }

    beforeReload = $(window).bind("beforeunload",function(){
         //here 'this' is referred to HTML element. So i am not able to call the disconnect method.
         this.disconnect();
    });

}

I am not able to access the 'disconnect' method inside jQuery function. How can i call the 'disconnect' method.

1
  • 1
    Just use arrow function Commented Oct 10, 2017 at 5:40

4 Answers 4

7

Try following.

beforeReload = $(window).bind("beforeunload",() => {
     //here 'this' is referred to HTML element. So i am not able to call the disconnect method.
     this.disconnect();
});

Try defining function as () => {} instead of function() {}. Because this refers its closest function or class. In your case this refers its closest function. Try using () => {} to escape function reference.

Sign up to request clarification or add additional context in comments.

Comments

2

As @Yurzui pointed use the arrow functions like this

beforeReload = $(window).bind("beforeunload",() =>{
     // use the arrow function 
     this.disconnect();
});

else if you want to continue using the old syntax use some thing like

beforeReload = $(window).bind("beforeunload",function(){
     //here 'this' is referred to HTML element. So i am not able to call the disconnect method.
     this.disconnect();
}).bind(this); // check this line

The arrow function preserves the value of this inside the function it is one of the most welcomed changes in ES6 .

Comments

1

You can bind your function to give it a value for this.

beforeReload = $(window).bind("beforeunload", this.disconnect.bind(this));

or

beforeReload = $(window).bind("beforeunload", (function() {
     this.disconnect();
}).bind(this));

Comments

1

Try this :

import { Component, OnInit } from '@angular/core';
declare var jQuery: any;

export class Component implements OnInit {

    constructor() { }

    ngOnInit() {
        jQuery(window).bind('beforeunload', function() {
            this.disconnect();
        }.bind(this));
    }

    disconnect() {
        console.log('disconnect');
    }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.