فهرست سرفصل‌های Angular
خانه (Home) معرفی (Intro) شروع سریع (Get Started) اولین اپ (First App) قالب ها (Templates) جای گذاری (Interpolation) متغیرهای ارجاعی (Reference Variables) ناوبری امن از نال (?.) (Null-Safe Navigation (?.)) دستورهای ساختاری (Structural Directives) ngTemplateOutlet (ngTemplateOutlet) عبارات و $event (Statements and $event) نام مستعار (Alias) پایپ ها (|) (Pipes (|)) بایندینگ ویژگی (Attribute Binding) TrackBy (TrackBy) کامپوننت ها (Components) دیتا بایندینگ (Data Binding) دایرکتیوها (Directives) رویدادها (Events) رندر شرطی (Conditional) لیست ها (Lists) فرم ها (Forms) روتر (Router) سرویس ها و تزریق وابستگی (Services & DI) کلاینت HTTP (HTTP Client) پایپ ها (Pipes) قلاب های چرخه حیات (Lifecycle Hooks) استایل دهی (Styling) راه اندازی برنامه (App Bootstrap) کنترل جریان (Control Flow) سیگنال ها (Signals) تشخیص تغییر (Change Detection) کامپوننت های پویا (Dynamic Comp) تزریق وابستگی پیشرفته (Advanced DI) روتر پیشرفته (Router Advanced) اینترسپتورهای HTTP (HTTP Interceptors) فرم های پیشرفته (Forms Advanced) مدیریت وضعیت (State Management) انیمیشن ها (Animations) تست (Testing) امنیت (Security) SSR و هیدریشن (SSR & Hydration) کامپایلر (Compiler) تمرین ها (Exercises) آزمون (Quiz) سرور (Server)
نتیجه‌ای برای جستجو یافت نشد.
Angular

Angular — تزریق وابستگی پیشرفته (Advanced DI)

آخرین بروزرسانی: 1404/08/21

تزریق وابستگی پیشرفته (Advanced DI)

«DI پیشرفته انگولار» یعنی تزریق هوشمند وابستگی ها. این یعنی ساخت و مدیریت سرویس ها طبق محدوده ها. همچنین با «توکن تزریق (InjectionToken)» مقدارهای غیرکلاسی را می دهیم. سپس با «inject()» آنها را می خوانیم. در نهایت، اختیار بیشتری با «اختیاری (Optional)» و «چندگانه (Multi)» داریم.

مبانی DI پیشرفته

درخت انژکتورها محدوده ها را تعیین می کند. بنابراین سرویس ها می توانند در اپ، روتر، یا کامپوننت ساخته شوند. سپس با «توکن تزریق» پیکربندی را تایپ دار می کنیم. همچنین با «inject()» در هر تابع دسترسی می گیریم.

import { InjectionToken } from '@angular/core';
import { inject } from '@angular/core';
import { Optional } from '@angular/core';

// Tokens
export const CONFIG = new InjectionToken<{ api: string }>('CONFIG');
export const FEATURES = new InjectionToken<string[]>('FEATURES');

// Optional inject
const cfg = inject(CONFIG, { optional: true });

// Multi providers
bootstrapApplication(App, {
  providers: [
    { provide: CONFIG, useValue: { api: '/api' } },
    { provide: FEATURES, useValue: 'search', multi: true },
    { provide: FEATURES, useValue: 'share', multi: true },
  ],
});

مشاهده در ادیتور

مثال: Multi Providers

چند مقدار زیر یک توکن می ریزیم. سپس آرایه نهایی را با inject() می خوانیم. این برای قابلیت های افزایشی عالی است.

import { bootstrapApplication } from '@angular/platform-browser';
import { Component } from '@angular/core';
import { InjectionToken } from '@angular/core';
import { inject } from '@angular/core';

const FEATURES = new InjectionToken<string[]>('FEATURES');

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <h3>DI: Multi Providers</h3>
    <p>Features: {{ features.join(', ') }}</p>
  `,
})
class App {
  features = inject(FEATURES);
}

bootstrapApplication(App, {
  providers: [
    { provide: FEATURES, useValue: 'search', multi: true },
    { provide: FEATURES, useValue: 'share', multi: true },
    { provide: FEATURES, useValue: 'ai', multi: true },
  ],
});

مشاهده در ادیتور

وابستگی اختیاری و چندگانه

گاهی وابستگی لازم نیست. بنابراین با «@Optional()» یا گزینه «optional» خطا نمی گیریم. سپس مقدار جایگزین نشان می دهیم.

import { InjectionToken } from '@angular/core';
import { inject } from '@angular/core';
import { Optional } from '@angular/core';

export const USER_NAME = new InjectionToken<string>('USER_NAME');

// Constructor optional
constructor(@Optional() public maybeName?: string) {}

// Function optional
const name = inject(USER_NAME, { optional: true });

مشاهده در ادیتور

import { bootstrapApplication } from '@angular/platform-browser';
import { Component } from '@angular/core';
import { InjectionToken } from '@angular/core';
import { inject } from '@angular/core';

const USER_NAME = new InjectionToken<string>('USER_NAME');
const FEATURES = new InjectionToken<string[]>('FEATURES');

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <h3>Optional & Multi</h3>
    <p>Hello: {{ name || 'Anonymous' }}</p>
    <p>Features: {{ features?.join(', ') || '∅' }}</p>
  `,
})
class App {
  name = inject(USER_NAME, { optional: true });
  features = inject(FEATURES, { optional: true });
}

bootstrapApplication(App, {
  providers: [
    // Try commenting USER_NAME to see optional behavior
    { provide: USER_NAME, useValue: 'Dana' },
    { provide: FEATURES, useValue: 'search', multi: true },
    { provide: FEATURES, useValue: 'share', multi: true },
  ],
});

مشاهده در ادیتور

گام های عملی

  1. توکن ها را بساز و نوع بده.
  2. در محدوده درست، provider ثبت کن.
  3. با inject مقدار را بردار.
  4. برای مقادیر متعدد، multi را فعال کن.
  5. برای نبود مقدار، optional را هندل کن.

نکته: نام توکن ها را شفاف بنویس. بنابراین تداخل کمتر می شود.

جمع بندی سریع

  • DI پیشرفته انگولار = انعطاف بالا.
  • InjectionToken برای مقادیر غیرکلاسی است.
  • inject() دسترسی ساده و سریع می دهد.
  • multi آرایه می سازد و ترکیب می کند.
  • optional خطای نبود وابستگی را می گیرد.

صفحات مرتبط: کامپوننت های پویا، DI پیشرفته انگولار، و کنترل جریان.