Почему не изменяется значение в auth.guard? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть переменная loggined, значение которой я изменяю, используя метод logTog().В этом методе я делаю запрос в службу, где я передаю текущий результат to auth.guard.В консоли "undefined" почему и как исправить?

код AppComponent:

export class AppComponent implements OnInit {
    loggined: boolean = false;

    constructor(private galleryService: GalleryService) {}
    
    ngOnInit() {
        this.logTog();
    }
    
    logTog(): void {
        this.loggined = !this.loggined;
        this.galleryService.auth(this.loggined);
    }
}

Услуга:

    auth(log:boolean):boolean {
        console.log(log);
        return log;
    }

охранник:

export class AuthGuard implements CanActivate, OnInit {
  constructor(private galleryService: GalleryService) {}
  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    return this.galleryService.auth();
  }
  ngOnInit() {

  }
}

1 Ответ

0 голосов
/ 15 октября 2018

Вы можете создать сервис для доступа к значению this.loggedIn в AppComponent, а также в AuthGuard.Вместо объявления переменной this.loggedIn в AppComponent объявите ее в службе.

LoggedInService

import { Injectable } from '@angular/core';

@Injectable()
export class LoggedInService {

  constructor(
    private router:Router
  ) { }

  private loggedIn;

  setLoggedIn(data){
   // Change Value of this.loggedIn to true or false according to your logic 
  }

  getLoggedIn(){
   return this.loggedIn;
  }

}

App.component.ts

export class AppComponent implements OnInit {


  constructor(private galleryService: GalleryService,
            private loggedInService: LoggedInService
  ) {}

  ngOnInit() {
    this.logTog();
  }

  logTog(): void {
    this.loggedInService.loggedIn = !this.loggedInService.loggedIn;
    this.galleryService.auth(this.loggedInService.loggedIn);
  }
}

Файл аутентификации остается тем же в соответствии с вашей логикой

// Тот же код

guard.ts

export class AuthGuard implements CanActivate, OnInit {
  constructor(private galleryService: GalleryService,
              private loggedInService: LoggedInService
  ) {}
  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    return this.galleryService.auth(this.loggedInService.loggedIn);
  }
  ngOnInit() {

  }
}
...