1. Új mappa létrehozása:
2. Boostrap telepítés: navigáljunk (a 1.pontban) telepített mappába
itt a BS töltődjön be először, utána a saját css-e:
"src/styles.css"
"node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
// ha más nevet adunk a style.css-nek,akkor az angular json-ben is át kell nevezni a styles-nél.
Ezt használjuk, ha csak a kinézet kell, ennél a projektnél ezt próbáljuk ki.
Fontos: < /router-outlet > ez a sor szerepeljen a app.component.html-ben,
nélküle nem működik a routing app.component.html aljára rakjuk!!!
HTML menü kódja:
< nav class="navbar navbar-expand-lg navbar-dark bg-dark">
< div class="container-fluid">
< a class="navbar-brand" href="/home">
< img width="40" alt="Angular Logo"
src=" ........" />
< /a>
< button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
< span class="navbar-toggler-icon">< /span>
< /button>
< div class="collapse navbar-collapse" id="navbarSupportedContent">
< ul class="navbar-nav me-auto mb-2 mb-lg-0">
< li class="nav-item">
< a class="nav-link active" aria-current="page" href="/home">Főoldal< /a>
< /li>
< li class="nav-item dropdown">
< a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Feladatok
< /a>
< ul class="dropdown-menu">
< li>< a class="dropdown-item" href="/rectangle">Téglalap kerület, terület< /a>< /li>
< li>< a class="dropdown-item" href="/bmi">Testtömegindex< /a>< /li>
< li>< hr class="dropdown-divider">< /li>
< li>< a class="dropdown-item" href="/productGrossPrice">Termék bruttó ár számítás< /a>< /li>
< li>< a class="dropdown-item" href="/triangle">Háromszög szerkeszthetőség< /a>< /li>
< li>< a class="dropdown-item" href="/oddEven">Páros/páratlan vizsgálat< /a>< /li>
< /ul>
< /li>
< li class="nav-item">
< a class="nav-link" href="https://angular.io" target="_blank">Angular segédlet< /a>
< /li>
< /ul>
< /div>
< /div>
< /nav>
< /div>
Menü 2
app/app.component.html oldalán állítható be. Aloldalt / jel után adjuk meg. Pl. href="/home" , href="/contact"
Az itt megadott tartalom az összes oldalon látható lesz!
< div class="container mt-5">
< nav>
< a class="btn btn-primary m-2" href ="/sample">Minta< /a>
< a class="btn btn-secondary m-2" href ="/example">Feladat< /a>
< a class="btn btn-info m-2" href ="/notfound">404< /a>
< /nav>
< /div>
Dropdown menü
< li class="nav-item dropdown" >
< a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Feladatok
< /a>
< ul class="dropdown-menu" >
< li>< a class="dropdown-item" href="/rectangle">Téglalap kerület, terület< /a >< /li >
< li>< a class="dropdown-item" href="/bmi">Testtömegindex< /a >< /li >
< li>< hr class="dropdown-divider">< /li >
< li>< a class="dropdown-item" href="/productGrossPrice">Termék bruttó ár számítás< /a >< /li >
< li>< a class="dropdown-item" href="/triangle">Háromszög szerkeszthetőség a >< /li >
< li>< a class="dropdown-item" href="/oddEven">Páros/páratlan vizsgálat a >< /li >
< /ul>
< /li >
7. TS/ componensek létrehozása - a menüben megaditt hrefből ng g c home paranccsal(menüpontok, domain végződés../home):
ng generate component sample
ng g c example //a - ng generate component sample - rövidítése//
ng g c notFound //404-es oldal létrehozása
8. routes beállítások -src/ app.routes.ts szerkesztése - az osszes létrehozott komponenst ide beírni:
-amíg ez üres, nem fog működni egy elérési útvonal sem!
(** a végére rakjuk, if-else-hez hasonlóan működik, (fontos a )sorrend:
url-ek, redirect és végül **)
const routes: Routes = [
{path: 'sample', component:SampleComponent},
{path:'example', component:ExampleComponent},
{path:'notfound', component:NotfoundComponent},
{path: '', redirectTo:'/sample', pathMatch: 'full' }, //ha nincs beállítva URL, akkor mindent a sample-re irányít - nem adunk meg path-t
{path: '
**', component: NotFoundComponent} //érvénytelen URL-re irányít - NotFoundComponent-ra
];
9. 404 beállítása
< div class="d-flex align-items-center justify-content-center vh-100">
< div class="text-center">
< h1 class="display-1 fw-bold">404< /h1>
< p class="fs-3">
Hopááá! Nem található az oldal.< /p>
< p class="lead">
Az oldal nem található :(
< /p>
< a href="/home" class="btn btn-primary">Főoldal< /a>
< /div>
< /div>
Databinding - Adatkötés: minta oldal
először TS-ben kell a változtatásokat megcsinálni, utána html
Interpoláció(egyszerű értékadás)
-létrehozunk egy TS változót,annak adunk egy érétéket, amit megjlelenítünk a html-en: Legegyszerűbb módja a TS változó elérésének.
< p class="fw-bold">Az oldal készítője: {{Author}}< /p>
Link: < a href="{{AngularUrl}}" target="_blank">Angular honlap - Interpoláció< /a >
Lépések röviden
Interpoláció(vid. 36/1.30):
1. TS/ komponensen belül létrehozni egy privat változót (kisbetűvel írva)
2. TS/ getter beállítása- ahol nem lesz módosítva a változó(pl kiírásoknál) ott elég csak gettert beállítani -getter lekérdez, setter beállít
3. TS/ setter beállítása - setter nélkül readonly, csak olvasható lesz!
4. HTML/: {{ privat valtoz beírása,nagybetűvel }} - pl AZ olal készítője{{Author}}
Hogy kell kinéznie? TS
Setter:
public set Author(value: string){
this.author = value;
public set A(value:number) {
this.a = value;
}
}
Getter:
public get Author(): string {
return this.author;
}
public get A():number {
return this.a;
}
privát változó példa:
export class RectangleComponent {
private a:number = 1;
private b:number = 1;
private author:string = 'Bettike';
}
FV.:
public getPerimeter():number {
return (this.a +this.b)*2;
}
public getArea():number {
return this.a *this.b;
}
Property Binding(tulajdonság kötés)
szorosabb összekötés
Van egy html elem/tulajdonsága, ami megkap egy értéket. A tulajdonságot szögletes zárójelbe tesszük.
[property]="value" -- property:
a html elem tulajdonsága(pl class, target,href,id. Inputnál lehet type , name ,id,class tulajdonság, stb), érték
< a [href]="AngularUrl" target="_blank">Angular - property binding< /a>
Lépések röviden
Property binding
1. HTML/ < a [href ] = getAngularUrl()” < /a> vagy button[disabled]=”true”
2. TS / komponens / isDisabled=false;
3. TS /setter
4. TS/ getter
Setter:
public set Author(value: string){
this.author = value;
}
Getter:
public get Author(): string {
return this.author;
}
Event Binding(esemény kötés)
majd onclick eseményt összekötünk egy TS működéssel
Ha bekövetkezik egy esemény, akkor meghívunk egy függvényt. Pl onclick.
Szintaxis:
< button class="btn btn-primary m-2" (click)="sendMessage()">Event binding - üzenet küldés< /button>
< button class="btn btn-warning m-2" (click)="changeAuthor()">Event binding - készítő módosítás < /button>
Lépések röviden
Event binding
1. HTML/ button gomb létrehozása
2. TS/publikus metódus létrehozása (pl sendMessage() )
3. HTML/ Onclick esemény létrehozása a gomboz) pl. (click)= ”sendMessage”
Lépések:
1. html kialakítás - gomb elkészítés
2. ( click)="fv.név()"
3. fv megírása: public sendMessage(): void alert('Event binding- fv hívás');
public changeAuthor():void this.author = 'Ersching Bettina';
public get ASide():number return this.aSide;
Two way Data Binding(Kétirányú adatkötés)
szoros kapcsolat van a beviteli mező és a TS-között.Input mezőn beadott szöveget érzi a TS is, dinamikusan kezelhető a változás
1.űrlapra van szükség - ehhez a TS/component-en belül be kell importálni a Forms nevét az imports[ ]-hoz!!! imports[FormsModule]-enélkül nem kezelhető az importálás!!