Angular 2 не может выполнять действия в методе подписки после вызова службы

#angular #typescript

#angular #typescript

Вопрос:

У меня есть служба для аутентификации моего пользователя, но я не знаю, что делать с полученными данными. Я не хочу перенаправлять пользователя на правильную страницу в зависимости от его роли и отображать его имя на странице. Я пробовал разные вещи, но когда я вызывал маршрутизатор или функцию, он никогда не находил. Похоже, что это не в том же контексте. Как я могу это сделать?

Вот мой компонент входа в систему :

   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 = resu<
              console.log(this.result); // result : {token: "ABCDE....", "email":"test@test.com", "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() {
      }

    }
 

Комментарии:

1. Что означает «маршрутизатор не найден»? маршрутизатор не определен? маршрутизатор не может найти маршрут?

2. Все в порядке, вы можете увидеть ответ

Ответ №1:

Ваша проблема заключается в следующей строке : .subscribe(function(result){ !!

При таком function() синтаксисе область this видимости теряется!

Вы должны использовать синтаксис со стрелкой () => ..

Вот так: .subscribe((result) => { .

Вот и все, теперь вы можете использовать this.router.... 🙂