Tutorja tal-Angular

Komponenti awtonomi ta' Angular 20 — inputs tas-sinjali, skoperta tal-bidliet OnPush, mudelli inline, żero NgModules, żero CSS.

X'se tibni

Formola żgħira ta' kuntatt — qasam b'tikketta, buttuna biex tibgħat, rbit fiż-żewġ direzzjonijiet, mġiba vera tat-tastiera u tal-qarrej tal-iskrin — l-ewwel għarwiena, imbagħad bi stil, f'madwar 10 minuti.

Qabel ma tibda

Għandek bżonn git, Node 22 jew iktar ġdid, u pnpm 10 jew iktar ġdid. Kwalunkwe proġett Angular 20 jaħdem — Angular CLI jew Analog.

Pass 1 — Ġib il-kodiċi

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-angular-headless
pnpm install
pnpm test        # vitest + TestBed, all 571 components
pnpm run build-storybook

Il-komponenti huma fajls ċatti fi components/ — Button.ts, TextInput.ts — kull wieħed huwa komponent awtonomu b'mudell inline, flimkien mas-spec u l-story tiegħu. Il-barrel index.ts jerġa' jesporta kull komponent; pnpm build jipproduċi pakkett fil-format Angular Package Format permezz ta' ng-packagr.

Pass 2 — L-ewwel komponent tiegħek

import { Component } from "@angular/core";
import { Button } from "@lilydesignsystem/angular-headless";

@Component({
  selector: "app-save-bar",
  standalone: true,
  imports: [Button],
  template: `<lily-button (click)="save()">Save</lily-button>`,
})
export class SaveBar {
  save() { console.log("saved"); }
}

Kull komponent jiddikjara selettur lily-* u jirrendi l-element semantiku bil-ganċ tal-klassi tiegħu — <button class="button" type="button"> hawn. L-inputs huma bbażati fuq is-sinjali: label() għal aria-label biex tissostitwixxi, className() biex iżżid klassijiet.

Pass 3 — Ikkomponi formola żgħira

import { Component, signal } from "@angular/core";
import { Form, Field, TextInput, Button } from "@lilydesignsystem/angular-headless";

@Component({
  selector: "app-contact-form",
  standalone: true,
  imports: [Form, Field, TextInput, Button],
  template: `
    <lily-form label="Contact form" (submit)="handleSubmit($event)">
      <lily-field label="Full name" [required]="true">
        <lily-text-input id="name" label="Full name" [(value)]="name" />
      </lily-field>
      <lily-button type="submit">Save</lily-button>
    </lily-form>
  `,
})
export class ContactForm {
  name = signal("");
}

lily-field jieħu t-tikketta viżibbli bħala label input tiegħu stess minflok komponent ta' tikketta mdaħħal — għaddiha darba, fuq il-qasam, u lily-text-inputkorrispondenti ta' label jipprovdi l-isem aċċessibbli. Il-komponenti bħall-inputs jesponu valuri model() allura banana-box [(value)] rbit fiż-żewġ direzzjonijiet jaħdem minnufih — kompatibbli ma' zoneless mill-bidu sal-aħħar.

Ivverifikat fl-2026-08-29: abbozz preċedenti daħħal komponent Label separat ġewwa lily-field, li rrendi żewġ tikketti (waħda vojta) għax lily-field diġà jirrendi tiegħu stess mill-input label — skopert billi ġie spezzjonat il-kodiċi tas-sors tal-komponent. Ir-rotta komposta tal-formola ta' kuntatt hija l-istess mudell, ittestjat b'testijiet e2e u axe veri.

Iċċekkja x-xogħol tiegħek: mexxi l-app u l-formola tidher għarwiena — eżattament kif intenzjonat: l-istil għad irid jiġi. Agħfas Tab: il-focus jgħaddi minn kull kontroll, it-tikketta tiġi mħabbra u l-ibgħat jaħdem. Il-mġiba lesta; id-dehra hija tiegħek u hija l-pass li jmiss.

Pass 4 — Agħtiha stil

Agħti stil lill-ganċijiet tal-klassi — .button, .text-input, .label, .field — fi styles.css, jew żid tema lesta mal-array styles fi angular.json / evita f' index.html:

<link rel="stylesheet" href="/themes/adobe-spectrum.css" />

Pass 5 — Ara kollox jaħdem

L-app eżempju Angular + Analog turi l-katalogu sħiħ b'rotot ibbażati fuq il-fajls u Vite:

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-angular-examples
pnpm install && pnpm run dev

Passi li jmiss

Mistoqsijiet matul it-triq? Il-paġna tal-għajnuna hija mimlija tweġibiet — u jekk pass jista' jkun iktar ċar, għidilna u nħossuna kuntenti ntejbu t-tutorja.