کافه انگولار
131 subscribers
49 photos
7 files
39 links
توی کافه انگولار، Angular رو مثل روتین روزمره یاد می‌گیریم؛ پروژه‌محور، تمیز، و قابل استفاده تو کار واقعی
اینجا Performance مهمه
رو Best practice ها کار میکنیم

ادمین: @omidkhosrojerdi
لینکدین: linkedin.com/in/omidkhosrojerdi
Download Telegram
🛜 سیگنال، بهترین حرکت انگولار

تا همین چند وقته پیش برای یه کار ساده مثل toggle کردن دکمه sidebar‌ای چیزی از rxjs استفاده میکردیم و کلی پیچیدگی‌های مختلف داشتیم که یه کار خیلی پیش‌پا افتاده و ساده انجام بدیم.

تو سال ۲۰۲۶ دیگه این چیزا مهم نیست و صرفا باید بذاریمشون پشت سر و پیچیدگی هارو کم کنیم.

دیگه بهترین state management برای انگولار signal هست و باید به بهترین شکل ازش استفاده کنیم.

کار یه نیرو خبره و سنیور باید این باشه بتونه تو پروژه های بزرگ:
‍‍۱. پیچیدگی هارو کم کنه
۲. پرفورمنس رو ببره بالا
۳. بالاترین reactivity رو تو برنامه بوجود بیاره
۴. بتونه memory leak رو به کمترین حد خودش برسونه

از مشکلات تون تو سیگنال بگید دورهم حل اش کنیم

#angularsignal
@angularcafe
👍51
میدونین Zone.js تو Angular مثل یه نگهبان فضوله 😅
‏هر اتفاق async (کلیک، HTTP، تایمر، Promise) می‌افته، می‌پره وسط و میگه: «یه چیزی شد!»
‏بعد Angular هم global change detection رو روی کل برنامه می‌ندازه و کل component tree رو دوباره چک می‌کنه.
‏این برای Developer ساده‌ست، ولی برای runtime دقیق/بهینه نیست.

‏Zoneless Angular میگه: به‌جای «یه چیزی شد… همه‌چی رو چک کن» برو سمت «state عوض شد… فقط همون قسمت رو آپدیت کن».
در ‏نتیجه:
پس zone.js استفاده بشه ساده است همه چی ولی بهینه نیست
و zoneless اگه استفاده بشه، دقت و performance میره بالا
البته با zoneless کردن صرفا track changes ها حذف نمیشه، یعنی Angular داره از automatic global tracking میره سمت explicit reactive state (مثل signals).

پس اگه پروژه تون خیلی پیچیده و بزرگ نیست و میتونین zoneless‌اش کنید بعد متوجه performance بالا و رندرینگ بهترش میشید

#zoneless
#angularsignal
@angularcafe
3👍2
تفاوت Async pipe در مقابل takeUntilDestroyed

الگوی قدیمیِ
«destroy$ + takeUntil + ngOnDestroy»

برای جلوگیری از memory leak عملاً بازنشسته شده و Angular حالا دو راه استاندارد و مطمئن داره:

1️⃣ استفاده از async pipe:
بهترین انتخاب وقتی دیتا فقط برای نمایش UIه. Angular خودش subscribe می‌کنه، با هر emit view رو update می‌کنه، و موقع destroy کامپوننت هم خودکار unsubscribe می‌کنه. هدف‌اش اینه که کامپوننت کلاس تا جای ممکن خالی و declarative بمونه.

2️⃣ استفاده از takeUntilDestroyed:
وقتی مجبوریم داخل کلاس subscribe کنیم (مثل Router events، WebSocket، side-effectها).

⚠️ نکته مهم: takeUntilDestroyed() به‌صورت پیش‌فرض باید داخل injection context صدا زده بشه (منظور constructor هست، نه ngOnInit). اگر داخل ngOnInit لازم داریم، باید DestroyRef رو inject کنید و به operator پاس بدید.

🎯 نکته طلاییش چیه؟
اگه فقط میخواین observable تون رو تو template استفاده کنید از async pipe استفاده کنید و اگه میخواین تو logic تون subscribe داشته باشید از takeUntilDestroyed استفاده کنید با رفرنس destroyRef

#observables
@angularcafe
👍3
#Angularinterview

سوال و جواب مصاحبه‌ای Angular - روز سوم (OnPush strategy و Change Detection)

ادامه‌ی سری روزانه مصاحبه Angular؛ این بار موضوعی رو می‌گیم که معمولاً مصاحبه‌کننده‌ها باهاش میزان شناختت از performance رو می‌سنجن.

🔹 موضوع روز ۳: Change Detection در Angular

1️⃣ سوال: Change Detection چیه؟
پاسخ: Change Detection مکانیزمیه که Angular باهاش تغییرات داده رو با UI همگام می‌کنه. هر وقت state اپلیکیشن تغییر کنه، Angular componentها رو بررسی می‌کنه و اگر لازم باشه DOM رو update می‌کنه.

2️⃣ سوال: Angular چه زمانی Change Detection رو اجرا می‌کنه؟
پاسخ: Change Detection معمولاً در این حالت‌ها اجرا می‌شه:
• حالت ۱: User eventها (مثل click و input)
• حالت ۲: HTTP responseها
• حالت ۳: Timerها (مثل setTimeout و setInterval)
• حالت ۴: Promiseها و Observableها

⚠️ نکته: این جریان معمولاً با Zone.js مدیریت می‌شه.

3️⃣ سوال: Default Change Detection strategy چیه؟
پاسخ:
• مورد: Angular همه‌ی componentها رو در component tree بررسی می‌کنه‌ (در صورت استفاده از Zone.js)
• مورد: ساده و قابل‌فهمه، ولی توی اپ‌های بزرگ می‌تونه باعث مشکل performance بشه

4️⃣ سوال: OnPush Change Detection چیه؟
پاسخ: OnPush به Angular می‌گه فقط وقتی Change Detection رو اجرا کنه که:
• مورد: reference مربوط به input تغییر کنه
• مورد: داخل خود component یک event رخ بده
• مورد: یک observable با async pipe مقدار جدید emit کنه

📌 نتیجه: این کار معمولاً performance رو خیلی بهتر می‌کنه.

5️⃣ سوال: چه زمانی بهتره از OnPush استفاده کنیم؟
پاسخ:
• مورد: اپلیکیشن‌های بزرگ
• مورد: componentهایی که با immutable data کار می‌کنن
• مورد: componentهای reusable یا presentational

6️⃣ سوال رایجِ ادامه‌دار تو مصاحبه
👉 چرا با OnPush بعضی وقت‌ها UI update نمی‌شه؟
چون reference آبجکت تغییر نکرده - Angular به immutability تکیه می‌کنه.

📌 فهمیدن Change Detection یعنی تجربه‌ی واقعی Angular داری، نه فقط بلد بودن syntax.

➡️ ادامه: روز ۴ به‌زودی… (Directives - Structural vs Attribute) ⚡️🧠

#Angularinterview
@angularcafe
👍1
یادتونه وقتی میخواستیم یه input رو focus کنیم تو reactive form با viewChild اینکار رو میکردیم یا حتی از viewChildren یه خونه از آرایه شو میگرفتیم و focus میکردیم؟

حالا تو Signal form بهمون این قابلیت داده شده که یه فیلد از فرم رو با متد focusBoundControl بیایم focus کنیم 🤩

مثلا میتونیم بگیم اگه فلان فیلد پر شد برو فیلد بعدی یا حتی خطا هایی که میخوریم رو فیلد شو focus کن

protected nextInvalidField() {
const nextInvalidField = this.form().errorSummary()[0];
if (nextInvalidField) {
nextInvalidField.fieldTree().focusBoundControl();
}
}


اگه کار نکرد یه request animation frame میزنیم تا زمان اجرا رو بندازه به فریم بعدی

clearField(field: string | number): void {
this.formModel.update(fields => ({...fields, [field]: ''}))

requestAnimationFrame(() => {
this.form.someField().focusBoundControl();
});
}

#angularsignal
#signalform
@angularcafe
🔥21👍1
#Angularinterview

سوال‌ و جواب مصاحبه Angular - روز چهارم (Directive‌ها)

ادامه‌ی سری روزانه مصاحبه Angular؛ این بار سراغ مفاهیمی می‌ریم که مصاحبه‌کننده‌ها انتظار دارن هم شفاف توضیحش بدی، هم با مثال واقعی.

🔹 موضوع روز ۴: Angular Directives

1️⃣ سوال: Directive در Angular چیه؟
پاسخ: Directive یک class هست که به elementهای موجود در DOM رفتار اضافه می‌کنه یا نحوه‌ی render شدن elementها رو تغییر می‌ده.

2️⃣ سوال: انواع Directiveها در Angular چی‌ها هستن؟
پاسخ:
• یک: Component Directives
خود componentها هم نوعی directive هستن که template دارن.

• دو: Structural Directives
ساختار DOM رو با اضافه/حذف کردن elementها تغییر می‌دن.
مثال‌ها: ngIf، *ngFor، *ngSwitch‌* که با control flow جدید 17+ انگولار بیشتر شون دیگه استفاده نمیشن

• سه: Attribute Directives
ظاهر یا رفتار یک element رو تغییر می‌دن.
مثال‌ها: ngClass، ngStyle، و directiveهای custom

3️⃣ سوال: فرق اصلی Structural و Attribute Directive چیه؟
پاسخ:
• یک: Structural: معمولاً با * شروع می‌شن و layout/ساختار DOM رو تغییر می‌دن
• دو: Attribute: مثل یک attribute روی element قرار می‌گیرن و رفتار/ظاهر همون element رو تغییر می‌دن

4️⃣ سوال: چرا Angular فقط اجازه می‌ده روی هر element یک Structural Directive داشته باشیم؟
پاسخ:
چون هر Structural Directive خودش DOM رو دست‌کاری می‌کنه.
⚠️نکته: اگر چندتا لازم داشتی، باید elementها رو داخل ng-container (یا یک wrapper مناسب) قرار بدی.

5️⃣ سوال: چطور یک Attribute Directive سفارشی می‌نویسی و چه کاربرد واقعی‌ای داره؟
پاسخ: Attribute Directive زمانی به‌درد می‌خوره که بخوای یک رفتار یا ظاهر تکرارشونده رو به چندین element اضافه کنی، بدون اینکه هر بار توی componentها کد تکراری بنویسی.
مثلاً یک directive برای permission یا highlight:
element رو بر اساس نقش کاربر disable/hidden می‌کنه
یا روی hover / focus استایل خاص می‌ده
یا یک behavior مثل auto-focus، auto-select، debounce input و… اضافه می‌کنه

📌 نکته مصاحبه‌ای:
یک Attribute Directive معمولاً با ElementRef و Renderer2 کار می‌کنه تا مستقیم DOM رو دست‌کاری نکنی و استاندارد Angular رو رعایت کنی.

➡️ ادامه: روز ۵ به‌زودی… (Services و Dependency Injection) ⚡️🧠

#Angularinterview
@angularcafe
👍21
مفاهیم SSR و Hydration در Angular

یکی از مهم‌ترین پیشرفت‌های Angular اینه که Server-Side Rendering (SSR) و Hydration حالا به‌صورت جدی و رسمی در خود فریم‌ورک پشتیبانی می‌شن و دیگه چیز اضافه و فرعی نیستن.

قبلاً با Angular Universal می‌تونستیم صفحات رو روی سرور render کنیم.
اما حالا با پشتیبانی از Hydration، Angular می‌تونه:
🔸اول HTML را روی سرور render کنه
🔸خیلی سریع همون HTML را برای مرورگر بفرسته
🔸به‌ جای اینکه همه چیز رو دوباره از صفر render کنه، همون HTML رو دوباره استفاده (reuse) کنه که با bind کردن event listener‌هایی که از DOM صدا زده میشه hydration اتفاق میفته و به همون render اولیه اضافه و فراخوانی میشه بدون اینکه DOM از اول ساخته بشه.

نتیجه چیه؟
🔸یک: First Contentful Paint (FCP) سریع‌تر می‌شه
🔸 دو:‌ SEO بهتر می‌شه
🔸سه: Core Web Vitals بهبود پیدا می‌کنه (موارد LCP و FID و CLS‌ای که برای Audit کنسول چک میکنیم برای بهبود performance و SEO)

برای داشبورد سازمانی enterprise و پلتفرم‌های عمومی، این موضوع واقعاً مهم و تأثیرگذاره و
خبری هم از Blink زدن نیست

#ssr
#seo
#angularhydration
@angularcafe
👍31
امروز یه سایتی پیدا کردم که توش افکت های خیلی خوبی برای Bento Grid design میتونین ایجاد کنین

اگه زیاده روی نکنیم تو استفاده اش میتونه زیبایی خاصی به Bento grid های سایت هامون اضافه کنه

انیمیشن های ریز و چشم گیر 👀👌🏾

https://ngxui.com/
👏42👍2
انگار Angular بالاخره داره وارد یه دوره‌ی جدید میشه:

یکی از جذاب‌ترین چیزهایی که با Angular 22 قراره بیشتر جدی بشه، حرکت به سمت Signal Forms هست.
یعنی کم‌کم از این مدل‌ها فاصله می‌گیریم :
FormBuilder
FormGroup
FormControl
valueChanges
patchValue
و می‌ریم سمت یه ساختار تمیزتر، ساده‌تر و reactiveتر :
public user = signal({
name: '',
email: ''
});
public form = form(this.user);

ماجرا فقط کوتاه‌تر شدن syntax نیست:
boilerplate کمتر
خوانایی بهتر
مدیریت state ساده‌تر
معماری Signal-first
تجربه توسعه‌دهندگی بهتر

Angular دوباره داره حس مدرن بودن میده

اگه سوالی تو زمینه signal و signal form و مابقی مسایل مربوط به signal داشتین خوشحال میشم کمکی کنم بهتون 👌🏾

#angularsignal
#signalform
#angularcafe
👍52
کاش یه سری دوستان توسعه دهنده انگولار که زمان کافی دارن تو روزمره شون ازین کارای ریکت کار ها کپی انگولار شو میزدن و به اشتراک میذاشتن

https://transitions.dev/

#angularcafe
👍1
یه قابلیت جدید در انگولار قراره اضافه بشه که تو Google I/O معرفی کردن به اسم @Boundary که اگر یک بخش از UI خطا داد، کل صفحه خراب نشه و فقط همون بخش با fallback UI جایگزین بشه.

@boundary {
<heavy-chart [data]="data()" />
} @error {
<chart-error-state />
}


#angularcafe
#angularfeature
👍8🔥3
https://angular.love/roadmap

کلیک کنید رو هر آیتم و مقاله های مربوط به اون موضوع رو مطالعه کنید

Angular Roadmap

#angularcafe
2👍1👨‍💻1
https://angular.love/angular-22-key-features-and-changes

تغییراتی که در نسخه ماژور یعنی ٢٢ انگولار قراره در دسترس ممنون باشه

آیا از Signal form و امکانات جدید انگولار مثل httpResource و Schema و form Value Control و... استفاده کردید؟

#angularcafe
🔥3👏1
امکانات جدیدی که تو نسخه ۲۲ داریم 🤩

http://blog.angular.dev/announcing-angular-v22-c52bb83a4664

#angularcafe
👍3🤩2
فارسی شده قابلیت های جدید نسخه ۲۲

#angularcafe
6👍2
تغییرات layout جدید ng version در directory پروژه

#angularcafe
👌41
import { Component, signal } from '@angular/core';
import { httpResource } from '@angular/common/http';

@Component({
selector: 'app-user',
template: `
@if (user.isLoading()) {
<p>Loading…</p>
} @else if (user.hasValue()) {
<h1>{{ user.value().name }}</h1>
}
`
})
export class UserComponent {
userId = signal(1);
// Re-fetches automatically whenever userId changes.
user = httpResource<User>(() => `/api/users/${this.userId()}`);
}


استفاده از httpResource بسیار جذاب و کارامد هست 🥳

#angularsignal
#angularcafe
👍4👌21
4👌1
🚀 ۲۰ تا سوال حرفه‌ای مصاحبه Angular که هر دولوپری باید تمرینشون کنه

1️⃣ در مورد Angular Change Detection کامل توضیح بده. Zone.js دقیقاً پشت‌صحنه چطوری کار می‌کنه؟

2️⃣ فرق Change Detection با حالت Default و OnPush چیه؟

3️⃣ فرق switchMap، mergeMap، concatMap و exhaustMap چیه؟ با مثال واقعی توضیح بده.

4️⃣ مفهوم Dependency Injection تو Angular از داخل چطوری کار می‌کنه؟

5️⃣ از Angular Signals چی میدونی و چه فرقی با RxJS Observable دارن؟

6️⃣ چه چیزهایی باعث memory leak تو پروژه‌های Angular می‌شن و چطوری می‌شه جلوشون رو گرفت؟

7️⃣ فرق Subject، BehaviorSubject، ReplaySubject و AsyncSubject چیه؟

8️⃣ تفاوت Standalone Componentها چه مواردی هستن و چطوری باعث بهتر شدن پروژه‌های Angular می‌شن؟

9️⃣ معماری Angular Ivy رو توضیح بده و بگو چه مزیت‌هایی داره.

🔟 قابلیت Server Side Rendering یا SSR تو Angular چطوری کار می‌کنه؟

1️⃣1️⃣ قابلیت Route Guardها تو Angular چی هستن و هر کدوم رو کی باید استفاده کنیم؟

2️⃣1️⃣ مفهوم Lazy Loading چیه و چطوری باعث بهتر شدن performance اپلیکیشن می‌شه؟

3️⃣1️⃣ فرق Reactive Forms و Template Driven Forms چیه؟

4️⃣1️⃣ چرا trackBy تو *ngFor مهمه و چطوری rendering رو سریع‌تر می‌کنه؟

5️⃣1️⃣ قابلیت HTTP Interceptorها چی هستن و تو پروژه‌های واقعی کجاها به درد می‌خورن؟

6️⃣1️⃣ در مورد Lifecycle hookهای Angular توضیح بده و بگو هر کدوم عملاً کجا استفاده می‌شن.

7️⃣1️⃣ فرق ViewChild، ContentChild، ViewChildren و ContentChildren چیه؟

8️⃣1️⃣ اشتباه‌های رایج یا anti-patternهای RxJS که دولوپرها تو پروژه‌های Angular انجام می‌دن چیا هستن؟

9️⃣1️⃣ برای بهتر کردن performance یه پروژه بزرگ Angular چه کارهایی انجام می‌دی؟

0️⃣2️⃣ اگه بخوای یه پروژه Angular بزرگ و enterprise-level طراحی کنی، معماریش رو چطوری می‌چینی؟

#angularinterview
#angularcafe
4👏1👌1