typescript - Angular 2 kan inte utföra åtgärder i subscribe-metoden efter att tjänsten har anropats


Jag har en tjänst för att autentisera min användare men jag vet inte vad jag ska göra med de data jag mottagit. Jag vill omdirigera användaren till rätt sida beroende på hans roll och visa hans namn på sidan. Jag har försökt olika saker men när jag kallade på routern eller en funktion hittar den det aldrig. Det verkar som om det inte är i samma kontext. Hur kan jag göra det?

Här är min inloggningskomponent:

  import { Component, OnInit } from '@angular/core';
    import {User} from "../models/user";
    import {AuthenticationService} from "../services/authentication.service";
    import {Router} from "@angular/router";

    @Component({
      selector: 'app-login',
      templateUrl: './login.component.html',
      styleUrls: ['./login.component.css'],
      providers: [AuthenticationService]
    })
    export class LoginComponent implements OnInit {

      user:User = new User();
      result: any;

      constructor(private authenticationService:AuthenticationService,
private router:Router) {
      }

      loginAction(){
        this.authenticationService.login(this.user)
            .subscribe(function(result){
              this.result = result;
              console.log(this.result); // result : {token: "ABCDE....", "email":"[email ", "username": "Jack James", role:"ADMIN"}
              this.doSth();     //Never called I supposed it's not the same context 
               this.router.navigate(['home']); // router is not find
              // I wan't to do actions to redirect to another page and display the user currently logged in
            },
              err => {
                // Log errors if any
                console.log(err);
            });
      }

      doSth(){
        console.log("Do something");
      }

      ngOnInit() {
      }

    }

Svar #1

Ditt problem är följande rad: .subscribe(function(result){ !!

Med den där function()-syntaxen förloras this-scope!

Du måste använda pil-syntaxen () => ..

Så här: .subscribe((result) => {.

Det var allt, nu kan du använda this.router.... :)