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 defined. Here is my implementation:
export class ContactComponent implements OnInit {
contactForm: FormGroup;
errorMsg:string = '';
redirect = "";
loggedIn(): void {
this.redirect = "dashboard";
console.log("success");
in my HTML the redirect variable is connected to a routerLink like this:
<a [routerLink]="redirect"></a>
I have tried this with other variables in other functions but had always the same error.
EDIT:
The loggedIn function is called within another function as "success" parameter like this:
submitForm(): void {
DBEventProxy.instance().dbevent.login(this.contactForm['username'],
this.contactForm['password'], this.loggedIn, this.failed);
}
The login function needs the parameters username, password, success function, failfunction.
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.
You need to bind
loggedIn
to the correct context. There are several options:1) define
loggedIn
as bound function:2) use
bind
3) wrap
this.loggedIn
into an arrow function that preserves context like this:And probably you want to do the same for
this.failed
. Read more aboutbind
and arrow functions hereSince you're using Typescript, you can use arrow functions to preserve the context you expect (
this
will refer to what you want).In
SubmitForm()
, replacethis.loggedIn
with()=>this.loggedIn()
. The same change should be made tothis.failed
if that's a function.See the Typescript wiki