I want to reference the keyword \"this\" in a typescript class in my Angular project. But it cannot be used. I always get the error that the variable I want to change is not
Since you're using Typescript, you can use arrow functions to preserve the context you expect (this will refer to what you want).
In SubmitForm(), replace this.loggedIn with ()=>this.loggedIn(). The same change should be made to this.failed if that's a function.
DBEventProxy.instance().dbevent.login(
this.contactForm['username'],
this.contactForm['password'],
()=>this.loggedIn(),
()=>this.failed()
);
See the Typescript wiki
Red flags for
thisThe biggest red flag you can keep in mind is the use of a class method without immediately invoking it. Any time you see a class method being referenced without being invoked as part of that same expression, this might be incorrect.
You need to bind loggedIn to the correct context. There are several options:
1) define loggedIn as bound function:
export class ContactComponent implements OnInit {
loggedIn = () = > {
this.redirect = "dashboard";
console.log("success");`
2) use bind
export class ContactComponent implements OnInit {
contactForm: FormGroup;
errorMsg:string = '';
redirect = "";
loggedIn(): void {
this.redirect = "dashboard";
console.log("success");
submitForm(): void {
DBEventProxy.instance().dbevent.login(this.contactForm['username'],
this.contactForm['password'], this.loggedIn.bind(this), this.failed);
^^^^^^^^^^
}
3) wrap this.loggedIn into an arrow function that preserves context like this:
this.contactForm['password'], () => this.loggedIn(), this.failed);
And probably you want to do the same for this.failed.
Read more about bind and arrow functions here
Instead of just referencing the function, you need to bind this to it: this.loggedIn.bind(this).
Only referencing the function ' strips ' it off the this reference it has when referencing. This is standard Javascript behavior.