[[oktatas:web:angular|< Angular]] ====== Angular Material ====== * **Szerző:** Sallai András * Copyright (c) 2021, Sallai András * Szerkesztve: 2021, 2022, 2025 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Az Angular Material ===== Az **[[https://material.angular.dev/|Angular Material]]** egy UI komponens gyűjtemény, amit Google készít. A fejlesztéskor a **Material Design** alapelveit használták. A gyűjtemény gombokat, beviteli mezőket és hasonló eszközöket tartalmaz. A használni kívánt eszközöket TypeScript oldali importálás követően a HTML sablonban építjük be, új HTML elemek és attribútumok formájában. Az Angular Material nem kínál megoldást oszlop és sorszerkezetek létrehozására. Erre a célra a [[oktatas:web:css:css_flex|CSS flexdobozai]] ajánlottak. ===== Telepítés ===== Az Angular Material-t hozzá kell adnunk a projekthez, amit célszerű az **ng** paranccsal megtenni. Telepítés: ng add @angular/material Telepítéskor rákérdez, milyen témát szeretnénk választani. ? Choose a prebuilt theme name, or "custom" for a custom theme: (Use arrow keys) ❯ Azure/Blue [Preview: https://material.angular.io?theme=azure-blue] Rose/Red [Preview: https://material.angular.io?theme=rose-red] Magenta/Violet [Preview: https://material.angular.io?theme=magenta-violet] Cyan/Orange [Preview: https://material.angular.io?theme=cyan-orange] Custom Következő kérdés, hogy globálisan szeretnénk-e használni a tipográfiai stílusokat: ? Set up global Angular Material typography styles? (y/N) Majd: animációt is szeretnénk-e engedélyezni: ? Include the Angular animations module? ❯ Include and enable animations Include, but disable animations Do not include ==== Használat adott komponensben ==== Tegyük fel, hogy az app.component.html fájlba szeretnénk használni. Importálni kell a .ts fájlban állomány és dekorátor szinten is. import {MatButtonModule} from '@angular/material/button'; /* ... */ imports: [RouterOutlet, MatButtonModule ], ===== A modul használata ===== A button elem számára egy mat-button attribútumot adunk:

Példa

Ellenőrizzük a gomb kinézetét. Használhatunk mat-raised, mat-flat és hasonló attribútumokat is, amelyek más-más kinézetet adnak a gombnak.

Példa

{{:oktatas:web:angular:angular_meterial_buttons.png?100|}} Színek: * primary: Elsődleges színséma. * accent: Másodlagos színséma hangsúlyozáshoz. * warn: Figyelmeztető színséma. A képen mat-flat-button attribútummal létrehozott gombokat látunk: {{:oktatas:web:angular:angular_material_colors.png?100|}} A mat-raised-button esetén csak a szövegek színe lesz beállítva. {{:oktatas:web:angular:angular_material_colors-2.png?100|}} ===== Button-ikon ===== {{:oktatas:web:angular:angular_material_button-icon.png?40|}} import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; imports: [ MatButtonModule, MatIconModule ], {{:oktatas:web:angular:angular_material_button-icon-2.png?80|}} Néhány népszerű ikonok: * Navigáció: menu, arrow_back, arrow_forward * Műveletek: add, delete, edit, done, share * Kommunikáció: mail, call, comment * Fájlok: folder, insert_drive_file * Média: play_arrow, pause, stop * Beállítások: settings, account_circle, search A teljes ikongyűjtemény: * https://fonts.google.com/icons (2025) ===== Vízszintes menü gombokból ===== {{:oktatas:web:angular:angular_material_menu-from-buttons.png?300|}} ===== Input ===== Az app.component.ts fájlba felvesszük: import {MatInputModule} from '@angular/material/input'; imports: [RouterOutlet, MatInputModule ], A HTML sablonban:
Alap Magasság
{{:oktatas:web:angular:angular_material_input-elements.png?200|}} ==== Szelekció és textarea ==== //... import { MatInputModule, MatFormField } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; //... imports: [ //... MatInputModule, MatFormField, MatSelectModule ] Input Válassz Első lehetőség Második lehetőség Textarea :host { display: flex; /* Rugalmas dobozok használata. */ flex-direction: column; /* Egymás alatt jelenjenek meg a dobozok. */ align-items: flex-start; /* Ne foglalják el a rendelkezésre álló helyet csak saját méretük legyen, balra igazítva. */ } A :host az aktuális Angular komponenst jelöli. {{:oktatas:web:angular:angular_material_input-select-textarea.png?200|}} ==== Form-filed dokumentáció ==== Hivatalos dokumentáció: * https://material.angular.dev/components/form-field/overview (2025) ===== Toggle button ===== A következő képen láthatjuk a toggle button kinézetét. {{:oktatas:web:angular:angular_material_toggle_button.png?200|}} A használathoz a MatSlideToggleModule-ra van szükségünk. import { MatSlideToggleModule } from '@angular/material/slide-toggle'; imports: [ //... MatSlideToggleModule ], A HTML sablonvan egy **mat-slide-toggle** elemet használhatunk. Kapcsolás TypeScript oldalon általában szeretnénk ennek a gombnak az állapotát kiolvasni. Ehhez kötést kell létrehozni egy változóhoz. TypeScriptbe kötés példa: import { FormsModule } from '@angular/forms'; imports: [ FormsModule ], //... export class AppComponent { isToggled = true; } Kapcsolás ===== Párbeszédablak ===== import { ChangeDetectionStrategy,Component, inject } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatDialog, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog'; @Component({ selector: 'app-root', standalone: true, imports: [ MatButtonModule ], templateUrl: './app.component.html', styleUrl: './app.component.css' }) export class AppComponent { readonly dialog = inject(MatDialog); openDialog( enterAnimationDuration: string, exitAnimationDuration: string): void { const dialogRef = this.dialog.open(Dialog, { width: '250px', enterAnimationDuration, exitAnimationDuration, }); dialogRef.afterClosed().subscribe(result => { console.log('Eredmény:', result); if(result === 'Igen') { console.log('Törlés...'); } }) } } @Component({ selector: 'dialog', templateUrl: 'dialog.html', standalone: true, imports: [MatButtonModule, MatDialogActions, MatDialogClose, MatDialogTitle, MatDialogContent], changeDetection: ChangeDetectionStrategy.OnPush, }) export class Dialog { readonly dialogRef = inject(MatDialogRef); } button { margin-right: 8px; }

Érték törlése

Törlöd ezt az értékekt?
Hivatalos dokumentáció: * https://material.angular.dev/components/dialog/overview (2025) ===== Dátum ===== //... import { MAT_DATE_LOCALE, provideNativeDateAdapter } from '@angular/material/core'; export const appConfig: ApplicationConfig = { providers: [ provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideAnimationsAsync(), provideNativeDateAdapter(), { provide: MAT_DATE_LOCALE, useValue: 'hu' }, ] }; //... import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatFormFieldModule } from '@angular/material/form-field'; //... imports: [ MatDatepickerModule, MatFormFieldModule ], //... Tartomány YYYY-MM-DD - YYYY-MM-DD Hivatalos dokumentáció: * https://material.angular.dev/components/datepicker/overview (2025) ===== Téma cseréje ===== Az Angular Material telepítéskor rákérdez a témára. Ez a téma később is megváltoztatható az angular.json fájlban. Keressük meg a styles kulcsot. "styles": [ "@angular/material/prebuilt-themes/cyan-orange.css", "src/styles.css" ], A node_modules könyvtárban keressük meg a betölthető témákat: node_modules/@angular/material/prebuilt-themes/ Példa: * azure-blue.css Állítsuk be a kívánt témát. ===== Flex dobozok ===== Mivel az Angular Material nem rendelkezik sor és oszlop elrendezési lehetőséggel, flex dobozok használatát ajánlják CSS-ből beállítva. Lássunk erre egy egyszerű példát: .container { margin-inline: 5%; padding-inline: 1.5rem; } .row { display: flex; margin-inline: -12px; } .col { padding-inline: 12px; width: 100%; }
aaa
bbb
ccc
ddd
===== Link ===== * https://material.angular.io/guide/getting-started