I am facing issues while accessing the service variable values inside my angular component. Navbar component is setting user as logged in inside the service and routing guard is responsible for enabling children route, but routing guard is not able to fetch the updated value of userStatus
import { Component, OnInit } from '@angular/core';
import { UserDetailsService } from '../user-details.service.js';
import { Router } from '@angular/router';
@Component({
selector: 'app-navbar',
templateUrl: './navbar.component.html',
styleUrls: ['./navbar.component.css']
})
export class NavbarComponent implements OnInit {
UserStatus: boolean;
constructor( private UserService: UserDetailsService, private router: Router) { }
ngOnInit() {
this.UserService.UserStatus.subscribe((data: boolean) => {
this.UserStatus = data;
});
this.UserService.getUserStatus();
}
logout() {
this.UserService.UpdateStatus(false);
this.router.navigate(['login']);
}
login() {
this.UserService.UpdateStatus(true);
this.router.navigate(['home/products']);
}
}
Routing Guard Component
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router, CanActivateChild} from '@angular/router';
import { Observable } from 'rxjs';
import { UserDetailsService } from './user-details.service.js';
@Injectable({
providedIn: 'root'
})
export class LoginGuardGuard implements CanActivateChild, CanActivate {
constructor(private userDetails: UserDetailsService, private router: Router) {}
canActivateChild(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if (this.userDetails.getUserStatus()) {
return true;
} else {
this.router.navigate(['login']);
// return false;
}
}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if (this.userDetails.getUserStatus()) {
return true;
} else {
this.router.navigate(['login']);
return false;
}
}
}