I am loading the div part between the tag. Its like below.
Here is my index.html
<html> <script> System.import('app').catch(function(err){ console.error(err); }); </script> </head> <body> <my-app>Loading...</my-app> </body> </html>
app.module.ts
@NgModule({ imports: [ BrowserModule, FormsModule, AppRoutingModule ], declarations: [ AppComponent, LoginComponent, HomeComponent, NewsfeedComponent, TopBarComponent, SideMenuComponent ], providers : [ AuthGaurd ], bootstrap: [ AppComponent ] }) export class AppComponent {}
home.component.ts
@Component({ selector: 'home', moduleId: module.id, templateUrl: 'home.component.html', providers : [ LoginService ] }) export class HomeComponent implements OnInit{ isLoggedin : boolean; constructor (private loginService : LoginService) { } ngOnInit(): void { this.loginService.getLogged().subscribe((isLoggedIn: boolean) => { this.isLoggedin = isLoggedIn; }); } } home.component.html <side-menu *ngIf='isLoggedin'></side-menu> <top-bar *ngIf='isLoggedin'></top-bar> <router-outlet></router-outlet>
auth.gaurd.ts
@Injectable() export class AuthGaurd implements CanActivate{ constructor(private router : Router) { } canActivate(){ if (localStorage.getItem('isLogin')){ return true; } this.router.navigate(['/login']) return false; } }
login.service.ts
@Injectable() export class LoginService { private subject: Subject<boolean> = new Subject<boolean>(); constructor(private router : Router) { } login(){ this.setLogged(true); localStorage.setItem("isLogin","true"); this.router.navigate(['/news-feed']); } logout(){ this.setLogged(false); localStorage.removeItem("isLogin"); this.router.navigate(['/login']); } getLogged(): Observable<boolean> { return this.subject.asObservable(); } setLogged(val : boolean): void { this.subject.next(val); } }
login.component.ts
@Component({ selector: 'login', moduleId: module.id, templateUrl: 'login.component.html' }) export class LoginComponent { constructor (private loginService : LoginService) { } login(){ this.loginService.login() } }
login.component.html
<input type="number" #mobileNumber /> <input type="password" #password /> <input type="button" (click)="login()">
newsfeed.component.ts
@Component({ selector: 'newsfeed', moduleId: module.id, templateUrl: 'newsfeed.component.html', }) export class NewsfeedComponent { }
newsfeed.component.html
some html text .... !!!!
application-routing.module.ts
@NgModule({ imports: [ RouterModule.forRoot([ { path : 'login', component : LoginComponent }, { path : 'news-feed', component : NewsfeedComponent, canActivate : [AuthGaurd] }, { path : '', redirectTo : '/news-feed', pathMatch : 'full' } { path: '**', component: LoginComponent } ]) ], exports: [ RouterModule ] }) export class AppRoutingModule {}
Actually, it works great when I go with clicks. how its launch is perfect than when you press the login button, it sends news and shows the expected result. but when I navigate from the browser url without loading the sidebar and the top bar component from home.html