[[oktatas:web:angular|< Angular]] ====== Angular Zöld Zrt ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2021 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Bevezetés ===== Zold alkalmazás létrehozása, a virtuális Zöld Zrt, számára. ===== Projekt készítése ===== ng new zold cd zold Az alkalmazásunk váz részét a src/app alkönyvtárban találjuk. ===== Az alkalmazás szolgáltatása ===== Ha nem vagyunk belépve a projekt könyvtárába lépjünk be, majd: ng serve --open Az ng serve --open kapcsolója automatikusan megnyitja böngészőben, a 4200-s porton. http://localhost:4200/ ===== Angular komponensek ===== A komponensek az Angular alapvető építőkövei. Gondoskodnak az adatok megjelenítéséről, figyelik a felhasználói bevitelt, majd ezek alapján tevékenységeket kezdeményeznek. Az alapkomponensek a következő részekből állnak: * app.component.ts - a komponens osztálya, TypeScriptben írva. * app.component.html - a komponens sablonja, HTML-ben írva. * app.component.css - a komponens privát CSS része. ==== Alkalmazás címének cseréje ==== Nyissuk meg az app.component.ts fájlt, majd állítsuk be a címet: title = 'Zöld Zrt'; Az app.component.html fájlt nyissuk meg, és töröljük a generált tartalmat. Írjuk bele a következőt:

{{title}}

==== Stílus hozzáadása ==== Adjunk az alkalmazásunknak egy kevés stílust. Szerkesszük az src/style.css fájlt. h1 { background-color: dodgerblue; padding: 20px; font-family:Arial, Helvetica, sans-serif; border-radius: 5px; } ===== A dolgozó neve ===== A dolgozókat angolosan employee rövidítésével fogjuk megadni: empl. Készítsünk egy empl nevű komponenst. ng generate component empl A parancs hatására, létrejön egy src/app/empl nevű könyvtár. Négy fájl generálódik. Az Empl komponens osztály állománya a következő: import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-empl', templateUrl: './empl.component.html', styleUrls: ['./empl.component.css'] }) export class EmplComponent implements OnInit { constructor() { } ngOnInit() { } } A Component dekorátor függvény meghatározza az Angular metaadatait a komponens számára. Alapértelmezetten három metaadat tulajdonság generálódik: * selector - CSS elem szelektora * templateUrl - a sablon fájl elérése * styleUrls - a privát CSS fájl elérése Az ngOnInit() egy olyan metódus, amely a komponens létrehozása során lefut. A komponens osztály mindig exportálva van, így felhasználható máshol. Hozzunk létre az Empl komponensünk számára egy az EmplComponent osztályban egy employee tulajdonságot. employee = 'Penge Béla'; A dolgozó megjelenítéséhez szerkesszük a Empl komponens sablonállományát, jelenítsük meg a dolgozót.

{{employee}}

Hogy lássuk a tartalmat, helyezzük el az alkalmazás sablonján a komponenst. Emlékezzünk, hogy a Empl komponens szelektora app-empl. Ennek megfelelően a következőt írjuk az src/app/app.component.html fájlba:

{{title}}

Nézzük meg az eredményt. ===== Empl interfész ===== Egy dolgozónak több tulajdonsága is van, a nevén kívül. Az egyszerűség kedvéért legyen most azonosító, név és fizetés. Készítsünk egy ilyen interfészt, az src/app könyvtárban. export interface Empl { id: number; name: string; salary: number; } Most menjünk az Empl komponensünk osztályához vissza, majd importáljuk a Empl interfészt: import { Empl } from '../empl'; Az employee tulajdonság legyen Empl típusú: employee: Empl = { id: 1, name: 'Penge Béla', salary: 3800000 }; Javítsuk az Empl komponens sablonját.

{{employee.id}}

{{employee.name}}

{{employee.salary}}

===== A dolgozó űrlap ===== Az űrlap használatához szükségünk van egy modulra. Nyissuk meg az app.module.ts fájlt. Importáljuk a FormsModule modult. import { FormsModule } from '@angular/forms'; Vegyük fel az imports nevű tömbbe a FormsModule modult is: imports: [ BrowserModule, FormsModule ], Készítsük el az űrlapot:

===== Lista megjelenítése ===== Hozzunk létre egy új mock állományt: import { Empl } from './empl'; export const EMPLOYEES: Empl[] = [ { id: 1, name: 'Páros Emese', salary: 3800500 }, { id: 2, name: 'Tornyos Péter', salary: 2800500 }, { id: 3, name: 'Regős Ilona', salary: 3200000 }, { id: 4, name: 'Rétes László', salary: 3100000 }, { id: 5, name: 'Fontos Katalin', salary: 2950000 }, { id: 6, name: 'Árva Ferenc', salary: 3300500 }, { id: 7, name: 'Lengő Tibor', salary: 3500000 }, { id: 8, name: 'Fejtős Aladár', salary: 3400500 }, { id: 9, name: 'Remete Zoltán', salary: 3500500 } ]; Importáld a Empl komponensben a mock fájlt. import { EMPLOYEES } from '../mock-employees'; Hozz létre egy új tulajdonságot, employees néven: export class EmplComponent Implements OnInit { employees = EMPLOYEES; } A *ngFor segítségével listázzuk a dolgozókat.
{{employee.id}} {{employee.name}} {{employee.salary}}
Az eredeti tartalom törölhető. ===== Részletek ===== A részletek megjelenítéséhez készítsünk egy empl-detail komponenst. ng generate component empl-detail Írjuk mega sablont:

{{employee.name | uppercase}} részletek


Az EmplComponent osztályban vegyél fel egy új selectedEmployee tulajdonságot és egy onSelect metódust: export class EmplComponent implements OnInit { employees = EMPLOYEES; selectedEmployee!: Empl; constructor() { } ngOnInit(): void { } onSelect(employee: Empl): void { this.selectedEmployee = employee; } } Javítsuk az empl komponens sablonját:
{{employee.id}} {{employee.name}} {{employee.salary}}
Az empl-detail komponens osztályában importáljuk az Input modult. Vegyük fel, a már meglévő sorba: import { Component, OnInit, Input } from '@angular/core'; Importáljuk a Empl interfészt is: import { Empl } from '../empl'; Az osztályon belül vegyünk fel egy tulajdonságot: @Input() employee?: Empl; Az EmplDetailComoponent.ts teljes tartalma: import { Component, OnInit, Input } from '@angular/core'; import { Empl } from '../empl'; @Component({ selector: 'app-empl-detail', templateUrl: './empl-detail.component.html', styleUrls: ['./empl-detail.component.css'] }) export class EmplDetailComponent implements OnInit { @Input() employee?: Empl; constructor() { } ngOnInit(): void { } } Most bármelyik sorra, ha kattintunk, megjelenik alul a részletekben, és javíthatjuk. ===== Forrás ===== * https://angular.io/tutorial/ (2021)