Angular ట్యుటోరియల్

Angular 20 స్వతంత్ర కాంపోనెంట్లు — సిగ్నల్ ఇన్‌పుట్‌లు, OnPush మార్పుల గుర్తింపు, ఇన్‌లైన్ టెంప్లేట్లు, సున్నా NgModules, సున్నా CSS.

మీరు ఏమి నిర్మిస్తారు

ఒక చిన్న సంప్రదింపు ఫారమ్ — లేబుల్ ఉన్న ఫీల్డ్, సమర్పించే బటన్, ద్విముఖ బైండింగ్, నిజమైన కీబోర్డ్ మరియు స్క్రీన్-రీడర్ ప్రవర్తన — మొదట ఖాళీగా, తర్వాత శైలీకరించి, సుమారు 10 నిమిషాల్లో.

ప్రారంభించే ముందు

మీకు git, Node 22 లేదా కొత్తది, మరియు pnpm 10 లేదా కొత్తది కావాలి. ఏ Angular 20 ప్రాజెక్ట్ అయినా పనిచేస్తుంది — Angular CLI లేదా Analog.

దశ 1 — కోడ్ పొందండి

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 ng-packagr ద్వారా Angular Package Format బండిల్‌ను తయారు చేస్తుంది.

దశ 2 — మీ మొదటి కాంపోనెంట్

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() క్లాస్‌లు జోడించడానికి.

దశ 3 — ఒక చిన్న ఫారమ్‌ను కూర్చండి

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-అనుకూలం.

2026-08-29న ధృవీకరించబడింది: ముందటి చిత్తుప్రతి ఒక ప్రత్యేక Label కాంపోనెంట్‌ను lily-fieldలోపల ఉంచింది, దాని వల్ల రెండు లేబుళ్లు (ఒకటి ఖాళీ) కనిపించాయి ఎందుకంటే lily-field ఇప్పటికే తన స్వంతదాన్ని label ఇన్‌పుట్ నుండి చూపిస్తుంది — కాంపోనెంట్ సోర్స్ కోడ్ తనిఖీ చేయడం ద్వారా గుర్తించబడింది. సంయుక్త సంప్రదింపు-ఫారమ్ మార్గం అదే నమూనా, నిజమైన e2e మరియు axe పరీక్షలతో పరీక్షించబడింది.

మీ పనిని తనిఖీ చేయండి: యాప్‌ను నడపండి, ఫారమ్ సాదాగా కనిపిస్తుంది — సరిగ్గా అనుకున్నట్లే: శైలీకరణ ఇంకా ముందుంది. నొక్కండి Tab: ఫోకస్ ప్రతి నియంత్రణ గుండా వెళుతుంది, లేబుల్ ప్రకటించబడుతుంది మరియు సమర్పణ పనిచేస్తుంది. ప్రవర్తన పూర్తయింది; రూపం మీది మరియు తదుపరి దశ.

దశ 4 — శైలీకరించండి

క్లాస్ హుక్‌లను శైలీకరించండి — .button, .text-input, .label, .field — ఇందులో styles.css, లేదా సిద్ధమైన థీమ్‌ను అర్రేకు జోడించండి styles లో angular.json / దాన్ని ఇక్కడ లింక్ చేయండి index.html:

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

దశ 5 — అంతా పనిచేయడం చూడండి

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

తదుపరి దశలు

దారిలో ప్రశ్నలా? సహాయ పేజీ సమాధానాలతో నిండి ఉంది — మరియు ఏదైనా దశను మరింత స్పష్టంగా చేయవచ్చంటే, మాకు చెప్పండి మరియు మేము సంతోషంగా ట్యుటోరియల్‌ను మెరుగుపరుస్తాము.