„Angular“ vadovas

„Angular 20“ savarankiški komponentai — signalų įvestys, OnPush pokyčių aptikimas, įterptieji šablonai, nulis NgModules, nulis CSS.

Ką sukursite

Nedidelė kontaktų forma — laukas su žyma, siuntimo mygtukas, dvipusis susiejimas, tikras klaviatūros ir ekrano skaitytuvo elgesys — pirma plika, paskui apipavidalinta, per maždaug 10 minučių.

Prieš pradedant

Reikia git, Node 22 ar naujesnės ir pnpm 10 ar naujesnio. Tinka bet kuris „Angular 20“ projektas — „Angular CLI“ arba „Analog“.

1 žingsnis — Gaukite kodą

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

Komponentai yra plokščios bylos aplanke components/ — Button.ts, TextInput.ts — kiekvienas yra savarankiškas komponentas su įterptuoju šablonu, plius jo spec ir story. Barrel index.ts iš naujo eksportuoja kiekvieną komponentą; pnpm build sukuria „Angular Package Format“ paketą per ng-packagr.

2 žingsnis — Jūsų pirmasis komponentas

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"); }
}

Kiekvienas komponentas deklaruoja lily-* parinkiklį ir atvaizduoja semantinį elementą su jo klasės kabliu — <button class="button" type="button"> čia. Įvestys paremtos signalais: label() elementui aria-label norint pakeisti, className() norint pridėti klasių.

3 žingsnis — Sudėkite nedidelę formą

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 priima matomą žymą kaip savo label įvestį vietoj įdėto žymos komponento — perduokite ją vieną kartą, prie lauko, o atitinkamas lily-text-inputiš label suteikia prieinamą pavadinimą. Į įvestis panašūs komponentai atveria model() reikšmes, todėl banana-box [(value)] dvipusis susiejimas veikia iš karto — visur suderinamas su zoneless.

Patikrinta 2026-08-29: ankstesnis juodraštis įdėjo atskirą Label komponentą į lily-field, todėl buvo atvaizduotos dvi žymos (viena tuščia), nes lily-field jau pats atvaizduoja savo iš label įvesties — pastebėta patikrinus komponento šaltinio kodą. Sudėtinis kontaktų formos maršrutas yra tas pats šablonas, išbandytas tikrais e2e ir axe testais.

Patikrinkite savo darbą: paleiskite programą ir forma atrodo plika — kaip ir numatyta: stilius dar laukia. Paspauskite Tab: fokusas pereina per kiekvieną valdiklį, žyma paskelbiama, o siuntimas veikia. Elgesys baigtas; išvaizda jūsų ir yra kitas žingsnis.

4 žingsnis — Apipavidalinkite

Apipavidalinkite klasių kablius — .button, .text-input, .label, .field — faile styles.cssarba pridėkite paruoštą temą į masyvą styles faile angular.json / susiekite ją faile index.html:

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

5 žingsnis — Pažiūrėkite, kaip viskas veikia

„Angular“ + „Analog“ pavyzdinė programa rodo visą katalogą su maršrutizavimu pagal bylas ir „Vite“:

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

Tolesni žingsniai

Klausimų pakeliui? Pagalbos puslapis pilnas atsakymų — o jei kuris nors žingsnis galėtų būti aiškesnis, pasakykite mums ir mielai patobulinsime vadovą.