Wednesday 30 November 2022

Angular #7 Service

Service:

Service once written and injected to all components in an app.

Service in Angular is a normal class with properties and reusable functions. These functions are called angular components, directives, and other services.

  • Easily share data between multiple components

Method 1 - Angular Service 

Exercise 12

Step 1: 

ng new service-demo

Choose y and css.   

Step 2:

Create service by

ng g s employee

Step 3:

open app.module.ts and add the following

import {EmployeeService} from './employee.service';


Step 4:

Create a file called as products.ts under app directory

export class Product {
 
    constructor(productID:number,    name: string ,   price:number) {
        this.productID=productID;
        this.name=name;
        this.price=price;
    }
 
    productID:number ;
    name: string ;
    price:number;
 
}


Step 5

Create a file product.service.ts

import {Product} from './product'
 
export class ProductService{
 
    public  getProducts() {
 
        let products:Product[];
 
        products=[
            new Product(1,'Tesla Phone',500),
            new Product(2,'iPhone',750),
            new Product(3,'Samsung TV',100)
        ]
 
        return products;              
    }
}
 

Step 6 :

Modify app.component.ts as follows

add  imports for product and product service and modify class AppComponent as below 

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

import { ProductService } from './product.service';
import { Product } from './product';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
})

export class AppComponent {
  products!: Product[];
  productService;

  constructor() {
    this.productService = new ProductService();
  }

  getProducts() {
    this.products = this.productService.getProducts();
  }

}

Note products! assertion here.


Step 7

Modify app.component.html with the following

<div class="container">
    <h1 class="heading"><strong>Services </strong>Demo</h1>
    <button type="button" (click)="getProducts()">Get Products</button>
    <div class='table-responsive'>
    <div>
      <table class='table'>
        <thead>
          <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Price</th>
          </tr>
        </thead>
        <tbody>
          <tr *ngFor="let product of products;">
            <td>{{product.productID}}</td>
            <td>{{product.name}}</td>
            <td>{{product.price}}</td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>

Step 8: In Terminal Prompt, Install Bootstrap 4

npm install bootstrap@4  

Modify styles section in angular.json file

 "styles": [
              "node_modules/bootstrap/dist/css/bootstrap.min.css",
              "src/styles.css"
       

Step 9:

Run in terminal 

ng serve

open localhost:4200 in browser and click getProducts Button

to check the similar output in browser window

Method 2 - Angular Service[DI].... 


Create a angular project in stackblitz
https://stackblitz.com/edit/angular

create services folder under app
create a file data.service.ts under services directory. Add the following contents:

import {Injectablefrom '@angular/core';

@Injectable()
export class DataService {
  count=0;
}

app.component.ts

import { Component } from '@angular/core';
import { DataService } from './services/data.service';
@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  name = 'Angular';
  constructor(private dataServiceDataService){}
}

app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';

import { AppComponent } from './app.component';
import { HelloComponent } from './hello.component';
import {DataServicefrom './services/data.service'
@NgModule({
  imports:      [ BrowserModuleFormsModule ],
  declarations: [ AppComponentHelloComponent ],
  bootstrap:    [ AppComponent ],
  providers: [DataService]
})
export class AppModule { }

app.component.html 

<hello name="{{ name }}"></hello>
<p>
  Start editing to see some magic happen :)
</p>
{{dataService.count}}
Check 0 appears in browser window

hello.component.ts


import { ComponentInput } from '@angular/core';
import { DataService } from './services/data.service';
@Component({
  selector: 'hello',
  template: `<h1>Hello {{name}}!{{dataService.count}}</h1>`,
  styles: [`h1 { font-family: Lato; }`]
})
export class HelloComponent  {
  @Input() namestring;

  constructor(private dataServiceDataService){}
}

Modify app.component.ts with incrementCount, decrementCount functions.

import { Component } from '@angular/core';
import { DataService } from './services/data.service';
@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  name = 'Angular';
  constructor(private dataServiceDataService){}
  incrementCount(){
    this.dataService.count++;
  }
  decrementCount(){
    this.dataService.count--;
  }

}

modify app.component.html as follows
<hello name="{{ name }}"></hello>
<p>
  Start editing to see some magic happen :)
</p>
{{dataService.count}}

<button >Increment</button>
<button>Subtract</decrement>



You can check in the browser (||r as shown below)

Hello Angular!50

Start editing to see some magic happen :)

50 







Angular #6 [ngClass]

 Ex. 11

[ngClass] Directive adds and removes CSS classes in an HTML element.

create class-demo project by 

Open styles.css in app root. Add the following and save:

.mystyle1{
    color: yellow;
    background-color: red;
    font-size: 16px;
}
.mystyle2
{
    height: 200px;
}

Open app.component.html

Delete the old contents, add the following code and save.

<P>ngClass Demo</P>
<div [ngClass] = "{mystyle1: true}">
  This is with red background and yellow text ie. mystyle1
</div>
 
<div [ngClass] = "{mystyle2: true}">
  This is with height 200px ie. mystyle2
</div>

<div [ngClass] = "['mystyle1', 'myclass2']">
  This is with red background and yellow text + height 200 pixel <br>
  ie. myclass1, mystyle2
</div>

Open browser with localhost:4200 to check the screen similar to this for ngClass Demo

Happy Classing Angular!!!


Friday 25 November 2022

Angular #5 with JSON

Ex 10

Angular with MongoDB integration

Ref : https://www.freakyjolly.com/angular-12-how-to-load-json-data-from-assets-folder/

Step 1

Create a new app by 

ng new json-demo

cd json-demo

code .  to open Visual Studio Code Editor

open app.component.ts file

add

import EmployeesJson from '../assets/employee.json';

and modify AppComponent class by

interface EMPLOYEE {
  ids: number;
  name: string;
}

export class AppComponent {
  title = 'Demo for angular-json interaction';
  Employees: EMPLOYEE[] = EmployeesJson;

  constructor(){
    console.log(this.Employees);
  }

Step 2 

Create JSON File: employees.json  in assets Folder
[
    { "ids": 102, "name": "Dr. Nice" },
    { "ids": 103, "name": "Bombasto" },
    { "ids": 104, "name": "Celeritas" },
    { "ids": 105, "name": "Magneta" },
    { "ids": 106, "name": "RubberMan" },
    { "ids": 107, "name": "Dynama" },
    { "ids": 108, "name": "Dr. IQ" },
    { "ids": 109, "name": "Magma" },
    { "ids": 200, "name": "Tornado" }
  ]

Step 3 
In app folder, create a file name as json-typings.d.ts +  add the following contents and save.
declare module "*.json" {
    const value: any;
    export default value;
    }
Step 4 
Modify file: app.component.html  in app folder as below:
<div>
  <table class="table">
    <thead>
        <tr>
          <th>Ids</th>
          <th>Name</th>
        </tr>
    </thead>
    <tbody>
      <tr *ngFor="let employee of Employees">
        <th>{{ employee.ids }}</th>
        <td>{{ employee.name }}</td>
      </tr>
    </tbody>
  </table>
</div>


Step 5 
Modify file: app.component.html  in app folder as below:
 <div class="container mt-5">
  <h1>{{title}}</h1>
  <div>
  <table class="table">
    <thead>
        <tr>
          <th>Ids</th>
          <th>Name</th>
        </tr>
    </thead>
    <br>
    <tbody>
      <tr *ngFor="let employee of Employees">
        <th scope="row">{{ employee.ids }}</th>
        <td style="color: #ff00ff">{{ employee.name }}</td>
      </tr>
    </tbody>
  </table>
</div>
Step 6: 

Install bootstrap by this command in New Terminal of VS code Editor

npm install bootstrap --save

After bootstrap installation: Open angular.json file.
update "styles.css" file at app  root with 

body {background-color: coral;}

In terminal type:

ng serve -o  

Check the browser window will appear similar to this:




Happy ☺☺☺☺Angular  App Development!!!



 

Thursday 24 November 2022

Angular #4 Routing

Navigation in Angular is done by Routing

Please follow these steps in command prompt:

1. ng new router-example   Select y for Routing and CSS for stylesheet.

2. cd  router example

3. ng g c student

4. ng g c subject

5. code . (or) Open the folder router-example manually 

6. In VS code editor, open the app.module.ts file.

7.

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

Locate @NgModule() section replace imports array with the following and save: 

 imports: [
    BrowserModule,
    RouterModule.forRoot([
      {path: 'student', component: StudentComponent},
      {path: 'subject', component: SubjectComponent},
    ]),
  ],

8. Open file app.component.html. add and save

Delete the old contents. add  and save:

<app-student></app-student>

<app-subject></app-subject>

open New Terminal Window and type 

ng serve

open in browser http://localhost:4200

:to check the app is working .

9. Open file app.component.html. add the following and save

<nav>
  <a class="button" routerLink="/student">Student List</a> |
  <a class="button" routerLink="/subject">Subject List</a>
 </nav>
<router-outlet> </router-outlet>

Check the Browser output to see as navbuttons.

10. open the app.component.css. Add the following and save:

.button {
    box-shadow: inset 0 1px 0 0 #ffffff;
    background: #ffffff linear-gradient(to bottom, #ffffff 5%, #f6f6f6 100%);
    border-radius: 6px;
    border: 1px solid #dcdcdc;
    display: inline-block;
    cursor: pointer;
    color: #666666;
    font-family: Arial, sans-serif;
    font-size: 15px;
    font-weight: bold;
    padding: 6px 24px;
    text-decoration: none;
    text-shadow: 0 1px 0 #ffffff;
    outline: 0;
}

.activebutton {
    box-shadow: inset 0 1px 0 0 #dcecfb;
    background: #bddbfa linear-gradient(to bottom, #bddbfa 5%, #80b5ea 100%);
    border: 1px solid #84bbf3;
    color: #ffffff;
    text-shadow: 0 1px 0 #528ecc;
}

10. Now Check in Browser window similar to the window as shown.

-------------------------------------------------------------------------------------------------

11. Adding some data in component to display while we navigate:

 Open subject.component.ts file and add/modify as follows the class SubjectComponent

 subjects = [
    { id: 12, name: 'Networks' },
    { id: 13, name: 'C' },
    { id: 14, name: 'C++' },
    { id: 15, name: 'Angular' },
    { id: 16, name: 'React' },
    { id: 17, name: 'Java' },
    { id: 18, name: 'Python' },
    { id: 19, name: 'HTML' },
    { id: 20, name: 'CSS' }
 
   ];

12. Add the following contents to student.component.html file:
<div *ngFor="let s of subjects">
    <div style="color: #0000ff">
        {{s.id}}:  {{s.name}}:
    </div>
</div>


13. Open subject.component.ts file and add/modify as follows the class SubjectComponent and save

 students = [
    { id: 102, name: 'Dr. Nice' },
    { id: 103, name: 'Bombasto' },
    { id: 104, name: 'Celeritas' },
    { id: 105, name: 'Magneta' },
    { id: 106, name: 'RubberMan' },
    { id: 107, name: 'Dynama' },
    { id: 108, name: 'Dr. IQ' },
    { id: 109, name: 'Magma' },
    { id: 200, name: 'Tornado' }
  ];

12. Add the following contents to subject.component.html file and save:
<div *ngFor="let s of students">
    <div style="color: #0000ff">
        {{s.id}}:  {{s.name}}:
    </div>
</div>


13. Check these output in browser window by typing ng server in terminal http://localhost:4200 in browser

Happy Learning Angular !!!💁💁


Exercise 

1. Modify file app.component.css with the following contents 

.button {
    box-shadow: inset 0 1px 0 0 #ffffff;
    background: #ffffff linear-gradient(to bottom, #ffffff 5%, #f6f6f6 100%);
    border-radius: 6px;
    border: 1px solid #dcdcdc;
    display: inline-block;
    cursor: pointer;
    color: #666666;
    font-family: Arial, sans-serif;
    font-size: 15px;
    font-weight: bold;
    padding: 6px 24px;
    text-decoration: none;
    text-shadow: 0 1px 0 #ffffff;
    outline: 0;
}

.activebutton {
    box-shadow: inset 0 1px 0 0 #dcecfb;
    background: #bddbfa linear-gradient(to bottom, #bddbfa 5%, #80b5ea 100%);
    border: 1px solid #84bbf3;
    color: #ffffff;
    text-shadow: 0 1px 0 #528ecc;
}


2. Modify the first <a> tag in app.component.html as follows:

<a class="button"
     routerLink="/student"
     routerLinkActive="activebutton"
     ariaCurrentWhenActive="page">Student List</a> |
 

See the browser output.

Monday 21 November 2022

Angular 3 Structural Directives(+/- components in HTML View)

EX 5 : 

*ngFor Directive

Create a new Angular Application in Visual Studio IDE Terminal

ng new EX5

Open folder EX5 and open src\app\app.component.html    file and add the following contents and save.

<div *ngFor = "let i of [1,3,5,7,9,11,12,14,15]">
  <li>No is : {{i}}<br></li>
</div>

run 

ng serve in Terminal. 

Once you get compiled successfully message, 

  1. Open http://localhost:4200 in any browser to check the following o/p:  
  • No is : 1
  • No is : 3
  • No is : 5
  • No is : 7
  • No is : 9
  • No is : 11
  • No is : 12
  • No is : 14
  • No is : 15   
  • -----------------------------------------------------------------------------------------------------------------------------

    EX 6 

    *ngIf Directive

    Open file src\app\app.component.ts file and add the displayButton object as shown below:

    export class AppComponent {
        displayButton: boolean = true;
    }


    Open  src\app\app.component.html    file and add the following contents and save.

    <div>
      <div *ngIf="displayButton">
         Message will disappear  when you click this button
            <button class="btn btn-sucess" (click)="showHide();">Click Me to Hide</button>
      </div>

    run 

    ng serve in Terminal. 

    Once you get compiled successfully message, Open http://localhost:4200 in any browser to check the following o/p initially:  

    Message will disappear when you click the button. with Click me to Hide Button. Once you click the button the browser screen will be blank.

    ---------------------------------------------------------------------------------------------------------------------------

    EX 7

    ngStyle Directive

    Open  src\app\app.component.html    file and add the following contents and save.

    <!-- //ngSTyle : changes the look and Behaviour of Web Page -->
    <div *ngFor = "let i of [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]">
        <div *ngIf = "(i%2 != 0)" [ngStyle]="{'background-color':'green'}">
            <li><button>{{i}}</button></li>
        </div>
        <div *ngIf = "(i%2 === 0)" [ngStyle]="{'background-color':'red'}">
            <li><button>{{i}}</button></li>
        </div>
    </div>

    run by ng serve in Terminal. 

    Once you get compiled successfully message, Open http://localhost:4200 in any browser to check the following o/p:  

    You will get screen like this


    EX8

    Pipes

    Open file src\app\app.component.ts file and add the displayButton object as shown below:

    export class AppComponent {
        textPipe = 'lower case to be converted to uppercase';
    }

    Open  src\app\app.component.html    file and add the following contents and save.

    <div>
      Original Text:&nbsp;{{textPipe}}<br>
      To lowercase :<span style="color:'green'">&nbsp;{{textPipe |  lowercase}}</span>---> all Lowerase<br>
      To uppercase :<span style="color:'blue'">&nbsp;{{textPipe |  uppercase}}</span>---> all uppercase<br>
      Slicing:<span style="color:'red'">{{textPipe | slice:0:5}}</span>--->First 5 charecters of the original text<br>
    </div>

    run ng serve in Terminal. 

    Once you get compiled successfully message, Open http://localhost:4200 in any browser to check the following o/p initially:  

    In browser:

            Original Text: First Pipe
            To lowercase : first pipe---> all Lowerase
            To uppercase : FIRST PIPE---> all uppercase
            Slicing:First--->First 5 charecters of the original text

    Happy Learning Angular! ☺☺☺














    Angular #2 Data Binding {{}} , [ ], ( ), [()]

    Ex 1.

    One Way Binding {{}}

    In Visual Studio, Terminal 

    create a project using 

     ng new ex1

    Ans N for Would you like to Add Angular Routing ?

    Choose CSS for Which Style sheet format you like to use?

    Will install packages(npm).

    Open folder ex1

    Expand src directory to see app, assets, environments.. directories.

    In app directory, open app.component.html files. Delete all the contents.

    add the following and save.

    <h1>{{title}}</h1>

    Invoke by 

    ng serve to run the server in Terminal Window. 

    Open any browser and go to http://localhost:/4200

    will display the title ex1 in browser

     Ex 2.

    Add user defined object inputData

    Add  the above USO in app.component.ts file AppCompenet class by 

    inputData = 'User Defined Data in Class';

    In app directory, open app.component.html files. 

    add the following and save.

    <p style="color: rgb(128, 0, 28);"><b>{{inputData}}</b></p>

    Check in browser.


    Ex  3.

    Add a new Component 'Container'In terminal 

    In Terminal Window, command prompt

    ng generate component container

    to create a new componont. Will create four new files and one update one file.

    PS F:\AngularCourse\ex1> ng generate component container
    CREATE src/app/container/container.component.html (24 bytes)
    CREATE src/app/container/container.component.spec.ts (620 bytes)
    CREATE src/app/container/container.component.ts (287 bytes)
    CREATE src/app/container/container.component.css (0 bytes)
    UPDATE src/app/app.module.ts (408 bytes)

    Now check the container.component.html file.

    Add the following contents inside app.compoent.html

    <app-container></app-container>

    Delete the contents. Add the following

    <h1>Header Comes here</h1>
    <h3>Nav Bar comes here</h3>
    <h5>Content  comes here</h5>

    Now invoke webpack by 

    ng serve

    command inside the terminal prompt to check the browser contents. 

    Ex 4.

    Evet data binding 

    add the following contents  in container.component.html file.

    <div>
        <Label> First Name : </Label>
        <input type="text">
        <button (click) = "onClick()">Clik Me</button>
    </div>

     in src\app\container\container.component.ts file, add the following 

    Inside ContainerComponent class after ngOnInit(): void{}  and save

    onClick(){
        alert('Some body kicked the Button');
      }

    Now invoke webpack by ng serve and check http://localhost:4200 in browser. Click the button to see alert box.


    Ex4: 

    Two way Binding [(ngModule)]y

    create a new project using 

    ng new ex4


    Add the following contents  in container.component.html file.

    <div>
        <Label> First Name : </Label>
        <input type="text" [(ngModel)] = "inputData"> <br><br>
        Entered Choice is  : {{inputData}}
    </div>

    Open app.component.ts File , add inside the class AppComponent  and save file.

    inputData = 'Two way Binding Example';

    Add the following in app.module.ts file import section and save.

    import { FormsModule } from '@angular/forms';

    Register  FormsModule   as shown below:


    @NgModule({
      declarations: [
        AppComponent
      ],
      imports: [
        BrowserModule,
        AppRoutingModule,
        FormsModule
      ],
      providers: [],
      bootstrap: [AppComponent]
    })

    run ng serve in terminal. Check in the opened browser http://localhost:4200.

    Whatever you typed will be displayed immediately next to  Entered Choice is  :



    Making Prompts for Profile Web Site

      Prompt: Can you create prompt to craft better draft in a given topic. Response: Sure! Could you please specify the topic for which you...