"this"不能用于打字稿功能(Angular)

Boe*_*rne 2 this typescript angular2-routing angular

我想在Angular项目的typescript类中引用关键字"this".但它无法使用.我总是得到我想要改变的变量没有定义的错误.这是我的实现:

export class ContactComponent implements OnInit {
  contactForm: FormGroup;
  errorMsg:string = '';
  redirect = "";

  loggedIn(): void {
         this.redirect = "dashboard";
         console.log("success");
Run Code Online (Sandbox Code Playgroud)

在我的HTML中,重定向变量连接到routerLink,如下所示:

<a [routerLink]="redirect"></a>
Run Code Online (Sandbox Code Playgroud)

我已尝试使用其他函数中的其他变量,但始终存在相同的错误.

编辑:

loggedIn函数在另一个函数中作为"success"参数调用,如下所示:

submitForm(): void {
    DBEventProxy.instance().dbevent.login(this.contactForm['username'], 
    this.contactForm['password'], this.loggedIn, this.failed);
  }
Run Code Online (Sandbox Code Playgroud)

登录功能需要参数用户名,密码,成功功能,失败功能.

Max*_*kyi 5

您需要绑定loggedIn到正确的上下文.有几种选择:

1)定义loggedIn为绑定函数:

export class ContactComponent implements OnInit {
  loggedIn = () = > {
         this.redirect = "dashboard";
         console.log("success");`
Run Code Online (Sandbox Code Playgroud)

2)使用 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);
                                                    ^^^^^^^^^^
      }
Run Code Online (Sandbox Code Playgroud)

3)包装this.loggedIn成一个保留上下文的箭头函数:

this.contactForm['password'], () => this.loggedIn(), this.failed);
Run Code Online (Sandbox Code Playgroud)

也许你想要做同样的事情this.failed.在这里阅读更多关于bind和箭头功能