Let's add some components to use our new and improved User
class.
Generate Components
Let's generate the components that we have in the nav, but can't navigate to yet.
MemberListComponent
- where we'll display users and allow filtering, sorting, etc.
Followers
- where we'll display users the logged in user is following, or users that are following them
Messages
- where we'll display inbox / outbox for messages
In the root of your SPA
project, run the following commands:
ng g c members/member-list --no-spec
ng g c followers --no-spec
ng g c messages --no-spec
Import RouterModule Into the AppModule
In your app.module.ts
file, import RouteModule
and add RouterModule
to the imports:
import { RouterModule } from '@angular/router';
// ...
imports: [
BrowserModule,
FormsModule,
HttpClientModule,
RouterModule.forRoot(appRoutes),
// ...
Add Routing
Next, in the /src/app
folder, add a new file called routes.ts
to hold our routes and import the components.
export const appRoutes: Routes = [
{ path: 'home', component: HomeComponent },
{ path: 'members', component: MemberListComponent },
{ path: 'messages', component: MessagesComponent },
{ path: 'followers', component: FollowersComponent },
{ path: '**', redirectTo: 'home', pathMatch: 'full' },
];
Go back to app.module.ts
and import appRoutes
:
import { appRoutes } from './routes';
Add Routes to NavBar
In nav.component.html
update the navbar links to use Angular router instead of the href attribute:
BEFORE:
<nav class="navbar navbar-expand-lg navbar-dark nav-red">
<div class="container">
<a class="navbar-brand" href="#">1150Connect</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<a class="nav-link" [routerLink]="['/members']">Users</a>
</li>
<li class="nav-item">
<a class="nav-link" [routerLink]="['/followers']">Followers</a>
</li>
<li class="nav-item">
<a class="nav-link" [routerLink]="['/messages']">Messages</a>
</li>
</ul>
AFTER:
<nav class="navbar navbar-expand-lg navbar-dark nav-red">
<div class="container">
<a class="navbar-brand" [routerLink]="['/home']">1150Connect</a> <!-- ADDED -->
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<a class="nav-link" [routerLink]="['/members']">Users</a> <!-- ADDED -->
</li>
<li class="nav-item">
<a class="nav-link" [routerLink]="['/followers']">Followers</a> <!-- ADDED -->
</li>
<li class="nav-item">
<a class="nav-link" [routerLink]="['/messages']">Messages</a> <!-- ADDED -->
</li>
</ul>
Add Router to the App Component Template
In app.component.html
, instead of loading <app-home>
- we'll load <router-outlet>
<app-nav></app-nav>
<router-outlet></router-outlet>
Run the SPA
project with ng serve
and verify that you can click around on the navbar without an issue.
Finally, let's only display the menu options if a user is logged in.
In the <ul>
element containing our list items of our menu options, add an ngIf
<ul class="navbar-nav mr-auto" *ngIf="loggedIn()">
<li class="nav-item">
<!-- ... -->