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.

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...