devonfw/jump-the-queue

authService must be public to allow AoT

Opened this issue · 0 comments

Category: Bug

Severity: Medium

Expected behaviour (In case of bug)
ng build --prod is able to build the project for production

Actual/current behaviour (In case of bug)
ng build --prod produces an error message:

ERROR in src\app\layout\header\header.component.html(3,69): : Property 'authService' is private and only accessible within class 'HeaderComponent'.

Steps to reproduce (In case of bug)
ng build --prod when finished the tutorial

Description of issue / expected enhacement /Comments
As described in https://github.com/devonfw/devonfw-tutorial-sources/wiki/build-devon4ng-application#separating-the-header-to-the-layout

Finally, the AuthService is needed because its being used by the html template to control if the user is logged in with isLogged().

....
  constructor(private authService: AuthService, private loginService: LoginService) { }
....

However, when building for production using --prod AoT is applied that recognizes the html as a separate class. (see https://medium.com/spektrakel-blog/angular-writing-aot-friendly-applications-7b64c8afbe3f for a discussion)

Solution:

....
  constructor(public authService: AuthService, private loginService: LoginService) { }
....

Now, the line <button mat-icon-button mdTooltip="Log out" (click)=onClickLogout() *ngIf="authService.isLogged()">in header.component.html is allowed to access authService.isLogged().

Your environment - windows/Linux, Devonfw version , component
irrelevant