Следующее является наилучшим оптимизированным способом достижения этого без особых изменений в существующем коде компонентов, и другим компонентам будет намного проще включить боковую панель.
Настройте маршрутизатор:
{
path: "home",
component: HomeComponent,
canActivate: [AuthGuard],
data: { sidebar: true }
},
Создание службы SidebarService для хранения / обновления значения, указывающего c для маршрутизации
@Injectable({
providedIn: "root"
})
export class SidebarService {
private showSidebar$ = new BehaviorSubject<Boolean>(false);
constructor() { }
setValue(value: boolean) {
this.showSidebar$.next(value);
}
getValue() {
this.showSidebar$.value;
}
getValue$() {
this.showSidebar$.asObservable;
}
}
Теперь в вашем AuthGuard
@Injectable({
providedIn: "root"
})
export class AuthGuard implements CanActivate, CanActivateChild, CanDeactivate<any> {
constructor(private router: Router,
private sidebarService : SidebarService ) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const showSidebar = route["data"]["sidebar] || false;
this.sidebarService.setValue(showSidebar );
}
}
Теперь добавьте * ngIf в селектор и введите Сервис SidebarService в компоненте.
В компоненте
constructor(private sidebarService : SidebarService ) { }
get showSideBar(){
return this.sidebarService.getValue$();
}
В HTML
<app-sidebar *ngIf="showSideBar | async"></app-sidebar> // Use either async pipe or you can have a variable and updating its value by subscribing to this.sidebarService.getValue$()
Теперь вам просто нужно добавить
data: { sidebar: true }
в маршруте вы хотите включить боковую панель. Это лучший оптимизированный способ, который я знаю, и он может быть полезен и вам.