Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Generating Your First Components and Modules in Angular 5

DZone's Guide to

Generating Your First Components and Modules in Angular 5

In this post, we are going to create a few components and modules like routing, navigation, registration forms, etc. using Angular 5.

· Web Dev Zone
Free Resource

Tips, tricks and tools for creating your own data-driven app, brought to you in partnership with Qlik.

Introduction

This post is a continuation of the Developing an Angular 5 App series. If you haven’t gone through the previous posts yet, I strongly recommend you to do that. In our previous post, we looked at the Angular 5 updates, and an overview of the project and how to set up your first application in Angular 5. In this post, we are going to create a few components and modules like routing, navigation, registration forms, etc. So, at the end of this article, you will have a registration application with navigation and routing enabled. I hope you like this article.

Developing an Angular 5 App

These are the previous posts in this series. Please go ahead and have a look.

  1. What Is New and How to Set Up our First Angular 5 Application
  2. Angular 5 Basic Demo Project Overview

Source Code

You can always clone or download the source code here.

Background

So as I mentioned, here we are going to create an Angular 5 application which contains a registration form, navigation, routing, etc.

Let’s Develop Our Application

We will be creating our application in a step-by-step manner so that you can easily follow along.

Okay, enough talking, let’s code!

Creating Your First Component

As we discussed in our previous posts, a component is a set of combined functionalities, in our case, we are going to create a component called Registration whose purpose is to serve all the codes for registration.

You can create your components in two ways:

  1. Manually create a file called registration.component.ts. If you opt for this method, you will have to register this component in app.module.ts yourself and also create the template.
  2. Using a command in the npm command prompt. This is an easy method, as it does all the background work for us.

I am going to opt for the second method. To create a component using your command prompt, you will have to run the following command.

ng generate component {component name } 

D:\SVenu\FullStackDevelopment\Angular\Angular5\ng5>ng g component registration 

Once you run the command, the following processes will occur:

  1. Create src/app/registration/registration.component.html
  2. Create src/app/registration/registration.component.spec.ts
  3. Create src/app/registration/registration.component.ts
  4. Create src/app/registration/registration.component.scss
  5. Update src/app/app.module.ts (501 bytes)

Now let us go back to our code folder and see the files. You can see your new files in app/registration folder. Here is how our registration.component.ts file looks like.

import {
    Component,
    OnInit
} from '@angular/core';

@Component({
    selector: 'app-registration',
    templateUrl: './registration.component.html',
    styleUrls: ['./registration.component.scss']
})
export class RegistrationComponent implements OnInit {
    constructor() {}
    ngOnInit() {}
}

If you look at the code, you'll see that the command created all of the code which we need to get started. The same component will be imported and added to our declarations in @NgModule in our app.module.ts.

import {
    BrowserModule
} from '@angular/platform-browser';
import {
    NgModule
} from '@angular/core';
import {
    AppComponent
} from './app.component';
import {
    RegistrationComponent
} from './registration/registration.component';
@NgModule({
    declarations: [
        AppComponent,
        RegistrationComponent
    ],
    imports: [
        BrowserModule
    ],
    providers: [],
    bootstrap: [AppComponent]
})
export class AppModule {}

Creating a Registration Form

Now that we have created our component, let’s edit our component with the text boxes and button we need. Go to your registration.component.html file and edit the content as follows:

<p>
    <input type="text" placeholder="First Name" />
    <input type="text" placeholder="Last Name" />
    <input type="email" placeholder="Email" />
    <input type="password" placeholder="Password" />
    <input type="password" placeholder="Confirm Passwrod" />
    <br/>
    <button>Register</button>
</p>

Creating a Route for Our New Component

Now that our registration page is updated, and we are set to create a route for said page. So, let’s create it now and test our registration page.

To create a route you will have to do some set of changes.

Make Sure That You Have One Base Element in Your Src/Index.html File

<base href="/">

Now Go to Your App.module.ts File and Import the Routermodule There

import { RouterModule, Routes } from '@angular/router';

Create Our Rout Array

const myRoots: Routes = [{
    path: 'register',
    component: RegistrationComponent
}];

Here the path is the route name and the component we used is the component to which that path refers.

Configure the Route in Imports

Once we create the routing array, it is time to configure it, using RouterModule.forRoot.

@NgModule({
    declarations: [
        AppComponent,
        RegistrationComponent
    ],
    imports: [
        BrowserModule,
        AppRoutingModule,
        RouterModule.forRoot(myRoots)
    ],
    providers: [],
    bootstrap: [AppComponent]
})

Set Our Router Outlet

We have successfully configured our route, now we need to set where this pages/components will appear. To do so, go to your app.component.html and add the router-outlet. This will cause the content of the route components to be displayed after the router-outlet tag.

<!--The content below is only a placeholder and can be replaced.-->
<div>
    <h1>
	 Welcome to {{title}}!
	</h1>

</div>
<router-outlet></router-outlet>

Now if you run our application by following the route, http://localhost:4200/register, you can see our registration page.

Sample_Registration_Form

Sample_Registration_Form

Isn’t this registration form too basic? Let’s style it.

Style Registration Page Using Material Design

Before we do anything, we need to install angular-material into our project. So that we can use the styles which are available there.

npm install --save @angular/material @angular/cdk

By any chance, if you get an error like the one below:

D:\SVenu\FullStackDevelopment\Angular\Angular5\ng5>npm install --save @angular/material @angular/cdk
npm ERR! path D:\SVenu\FullStackDevelopment\Angular\Angular5\ng5\node_modules\fsevents\node_modules\dashdash\node_modules
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall scandir
npm ERR! Error: EPERM: operation not permitted, scandir 'D:\SVenu\FullStackDevelopment\Angular\Angular5\ng5\node_modules\fsevents\node_modules\dashdash\node_modules'
npm ERR! { Error: EPERM: operation not permitted, scandir 'D:\SVenu\FullStackDevelopment\Angular\Angular5\ng5\node_modules\fsevents\node_modules\dashdash\node_modules'
npm ERR! stack: 'Error: EPERM: operation not permitted, scandir \'D:\\SVenu\\FullStackDevelopment\\Angular\\Angular5\\ng5\\node_modules\\fsevents\\node_modules\\dashdash\\node_modules\'',
npm ERR! errno: -4048,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'scandir',
npm ERR! path: 'D:\\SVenu\\FullStackDevelopment\\Angular\\Angular5\\ng5\\node_modules\\fsevents\\node_modules\\dashdash\\node_modules' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

You should try running the following command before you execute the above command again.

  1. cmd.exe npm

You may also need to install the animation as well:

  1. npm install --save @angular/animations 

Once you have installed it, we need to import some of the modules in the app.module.ts file as follows:

import { MatButtonModule, MatCardModule, MatInputModule, MatSnackBarModule, MatToolbarModule } from '@angular/material';

Now add those components to our import list in @NgModule.

@NgModule({
  declarations: [
    AppComponent,
    RegistrationComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    MatButtonModule, MatCardModule, MatInputModule, MatSnackBarModule, MatToolbarModule,
    RouterModule.forRoot(myRoots)
  ],
  providers: [],
  bootstrap: [AppComponent]
})

Let’s go back to our registration.component.html file and male some design changes.

<mat-card>
  <mat-input-container>
    <input matInput type="text" placeholder="First Name" />
  </mat-input-container>
  <mat-input-container>
    <input matInput type="text" placeholder="Last Name" />
  </mat-input-container>
  <mat-input-container>
    <input matInput type="email" placeholder="Email" />
  </mat-input-container>
  <mat-input-container>
    <input matInput type="password" placeholder="Password" />
  </mat-input-container>
  <mat-input-container>
    <input matInput type="password" placeholder="Confirm Passwrod" />
  </mat-input-container>
  <br />
  <button mat-raised-button color="primary">Register</button>
</mat-card>

We also need to include one material CSS in our Style.scss file.

  1. @import '~@angular/material/prebuilt-themes/deeppurple-amber.css'; 

Now let’s run our application and see our registration page.

Material_Angular_Form

Material_Angular_Form

That’s cool, we did it!

Create Home and Navigation Components

We know how to create new components now using the generate command, so let’s create a new component for Home and Navigation.

ng g component home
ng g component nav

As we used the commands to create the components, the same will be imported into our app.module.ts automatically, so we don’t need to worry about it.

Now let’s edit our nav component and use a material design for the navigation buttons.

<mat-toolbar color="primary">
  <button mat-button routerLink="/">Home</button>
  <button mat-button routerLink="/register">Register</button>
</mat-toolbar>

Here the routerLink property specifies the route to where we need to redirect. We are not done yet, though. We need to use this component on our app.component.html page to see this navigation.

<!--The content below is only a placeholder and can be replaced.-->
<div style="text-align:center">
  <h1>
    Welcome to {{title}}!
  </h1>
  <app-nav></app-nav>
</div>
<router-outlet></router-outlet>

And we also need to add our new route for our HomeComponent. So go to your app.module.ts and edit your route as follows.

const myRoots: Routes = [
  { path: '', component: HomeComponent },
  { path: 'register', component: RegistrationComponent }
];

Let’s give it a try now!

Nav_Demo

Nav_Demo

That’s all for today. In our next article, we will start to do some validations and set up two-way data binding, so that the model values can be passed to the server. Till then, bye!

Conclusion

Thanks a lot for reading! Did I miss anything that you may think which is needed? Did you find this post useful? I hope you liked this article. Please share me your valuable suggestions and feedback.

Explore data-driven apps with less coding and query writing, brought to you in partnership with Qlik.

Topics:
angular material ,web dev ,angular 5 ,angular applications

Published at DZone with permission of Sibeesh Venu, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}