آموزش Angular
مؤلفههای مستقل Angular 20 — ورودیهای سیگنالی، تشخیص تغییر OnPush، قالبهای درونخطی، صفر NgModules، صفر CSS.
چه چیزی میسازید
یک فرم تماس کوچک — فیلد دارای برچسب، دکمه ارسال، پیوند دوطرفه، رفتار واقعی صفحهکلید و صفحهخوان — ابتدا ساده، سپس استایلدار، در حدود ۱۰ دقیقه.
پیش از شروع
به git، Node 22 یا جدیدتر و pnpm 10 یا جدیدتر نیاز دارید. هر پروژه Angular 20 کار میکند — Angular CLI یا Analog.
گام ۱ — کد را بگیرید
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
مؤلفهها فایلهای تخت هستند در components/ —
Button.ts, TextInput.ts — هر کدام یک مؤلفه مستقل با قالب درونخطی است، بههمراه spec و story خودش. بارل
index.ts هر مؤلفه را دوباره صادر میکند؛ pnpm build
یک بسته به قالب Angular Package Format از طریق ng-packagr میسازد.
گام ۲ — نخستین مؤلفه شما
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"); }
}
هر مؤلفه یک انتخابگر lily-* اعلام میکند و عنصر معنایی را با قلاب کلاس خود نمایش میدهد —
<button class="button" type="button"> اینجا. ورودیها مبتنی بر سیگنالاند: label() برای یک aria-label
برای بازنویسی، className() برای افزودن کلاسها.
گام ۳ — یک فرم کوچک بسازید
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 برچسب قابلمشاهده را بهعنوان
label ورودی خودش میگیرد، نه بهصورت مؤلفه برچسب تودرتو — آن را یکبار روی فیلد بدهید، و lily-text-inputمتناظر
label نام قابلدسترس را فراهم میکند. مؤلفههای ورودیمانند model() مقدارها را در معرض میگذارند، پس پیوند دوطرفه banana-box [(value)]
بیدرنگ کار میکند — سراسر سازگار با zoneless.
تأییدشده در ۲۰۲۶-۰۸-۲۹: یک پیشنویس قبلی مؤلفه Label جداگانهای را درون lily-fieldقرار داده بود که دو برچسب (یکی خالی) نمایش میداد، چون
lily-field خودش از ورودی
label برچسب خود را نمایش میدهد — با بررسی کد منبع مؤلفه کشف شد.
مسیر ترکیبی فرم تماس
همین الگوست، با آزمونهای واقعی e2e و axe سنجیده شده.
کارتان را بررسی کنید: برنامه را اجرا کنید و فرم ساده به نظر میرسد — دقیقاً همانطور که قصد شده: استایلدهی هنوز در پیش است. بزنید Tab: تمرکز از هر کنترل میگذرد، برچسب اعلام میشود و ارسال کار میکند. رفتار کامل است؛ ظاهر مال شماست و گام بعدی است.
گام ۴ — استایل بدهید
قلابهای کلاس را استایل بدهید — .button, .text-input,
.label, .field — در styles.css، یا یک تم آماده را به آرایه styles در
angular.json / در آن پیوند دهید index.html:
<link rel="stylesheet" href="/themes/adobe-spectrum.css" />
گام ۵ — همهچیز را در حال کار ببینید
برنامه نمونه Angular + Analog کل فهرست را با مسیریابی مبتنی بر فایل و Vite نشان میدهد:
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-angular-examples
pnpm install && pnpm run dev
گامهای بعدی
- تمها — تعویض در زمان اجرا با کمکی theme-picker برای Angular.
- کمکیهای ترجیحات — زبان و اندازه متن.
- فهرست مؤلفهها — ویژگیها، ARIA و صفحهکلید برای هر مؤلفه.
در مسیر پرسشی دارید؟ صفحه راهنما پر از پاسخ است — و اگر گامی میتواند روشنتر باشد، به ما بگویید و ما با کمال میل آموزش را بهبود میدهیم.