IslomDevIslomDev
Booster
Imtihon
Booster
Imtihon
  • Angular Intervyu Tayyorgarlik
  • JavaScript / TypeScript

    • JavaScript / TypeScript
    • Asoslar (JavaScript)
    • Asinxronlik
    • Prototip va OOP
    • TypeScript
    • Performance
  • Algoritmlash

    • Algoritmlash
    • Murakkablik tahlili
    • Ma'lumot tuzilmalari
    • Qidiruv va Saralash
    • Algoritmik paradigmalar
    • Amaliy masalalar
  • Angular — Boshlang'ich

    • Angular — Boshlang'ich
    • Component
    • Template
    • Change Detection
    • Advanced Component
  • Angular — Service va DI

    • Angular — Service va DI
    • Service asoslari
    • HTTP
    • Hierarchical DI
    • Advanced DI
    • State management (service)
  • Angular — Versiyalar

    • Angular — Versiyalar
    • Angular 12–13
    • Angular 14
    • Angular 15
    • Angular 16
    • Angular 17
    • Angular 18+
  • Angular — Directive

    • Angular — Directive
    • Built-in Directives
    • Custom Attribute Directive
    • Custom Structural Directive
    • Advanced
  • Angular — RxJS

    • Angular — RxJS
    • Observable asoslari
    • Asosiy operatorlar
    • Higher-order operatorlar
    • Combination operatorlar
    • Subject turlari
    • Xato va xotira
    • Advanced
  • Angular — Pipe

    • Angular — Pipe
    • Built-in Pipes
    • Custom Pipe
    • Performance
  • Angular — Forms

    • Angular — Forms
    • Template-driven Forms
    • Reactive Forms
    • Validators
    • Advanced
  • Angular — NgModule

    • Angular — NgModule
    • NgModule asoslari
    • Module arxitekturasi
    • Lazy Loading
    • Standalone vs NgModule
  • Angular — Sintaksis va Clean Code

    • Angular — Sintaksis va Clean Code
    • Template sintaksisi
    • Angular 17+ yangi sintaksis
    • Komponent arxitekturasi
    • Performance pattern'lar
    • SOLID va Clean Code
    • Testing

Angular 15

Daraja:

Angular 15 — functional router API, directive composition va standalone'ni yanada mustahkamlash. provideRouter, provideHttpClient va functional guards zamonaviy bootstrap pattern'ini to'ldirdi.

Directive Composition API — hostDirectives

MiddleSenior

Nima bu?

hostDirectives — component yoki directive'ga boshqa directive'larni composition orqali qo'shish. Kod takrorlanishini kamaytiradi — masalan, har component'ga HasPermissionDirective qo'shish o'rniga bir joyda e'lon qilish. Input/output forward qilish mumkin.

Gotcha: hostDirectives orqali qo'shilgan directive'ning @Input/@Outputlari default holda yashirin — component tashqarisiga avtomatik ochilmaydi. Faqat inputs/outputs massivida aniq ko'rsatilganlari component'ning public API'siga aylanadi (pastdagi misolda faqat highlightColor ochilgan; TooltipDirectivening text inputi esa parent'dan berilmaydi — kerak bo'lsa alohida forward qilinishi kerak). Bu inheritance (extends) dan farqi — composition orqali faqat ataylab tanlangan yuzani ochish mumkin, butun API avtomatik meros olinmaydi.

Kod misoli

@Directive({
  selector: '[appTooltip]',
  standalone: true,
})
export class TooltipDirective {
  @Input('appTooltip') text = '';
  // tooltip logic...
}

@Directive({
  selector: '[appHighlight]',
  standalone: true,
})
export class HighlightDirective {
  @Input() highlightColor = 'yellow';
}

// Composition — ikkala directive bir component'da
@Component({
  selector: 'app-user-card',
  standalone: true,
  hostDirectives: [
    TooltipDirective,
    {
      directive: HighlightDirective,
      inputs: ['highlightColor'],
    },
  ],
  template: `<div>{{ user.name }}</div>`,
})
export class UserCardComponent {
  @Input() user!: User;
}

Imtihonda

  • hostDirectives va template'da directive qo'yish farqi?
  • Qachon composition API foydali?

Yodlash uchun

hostDirectives = directive'larni component'ga compile vaqtida qo'shish. DRY pattern.

Functional Guards va Resolvers

Middle

Nima bu?

Functional guards (CanActivateFn, CanMatchFn va h.k.) aslida Angular 14.2 da kiritilgan — class o'rniga oddiy funksiya, inject() bilan service chaqiriladi. Angular 15 da esa class-based guard interfeyslari (CanActivate va boshqalar) deprecated deb e'lon qilindi va functional yondashuv rasmiy tavsiya etilgan default'ga aylandi. Tree-shakable, test oson, kam boilerplate.

Kod misoli

import { CanActivateFn, Router } from '@angular/router';
import { inject } from '@angular/core';

export const authGuard: CanActivateFn = (route, state) => {
  const auth = inject(AuthService);
  const router = inject(Router);

  if (auth.isLoggedIn()) {
    return true;
  }
  return router.createUrlTree(['/login'], {
    queryParams: { returnUrl: state.url },
  });
};

export const adminGuard: CanActivateFn = () => {
  const auth = inject(AuthService);
  return auth.hasRole('admin') || inject(Router).createUrlTree(['/forbidden']);
};

// Routes
const routes: Routes = [
  {
    path: 'admin',
    canActivate: [authGuard, adminGuard],
    loadComponent: () => import('./admin.component'),
  },
];

Imtihonda

  • Functional guard va class CanActivate farqi?
  • Guard ichida Router qanday inject qilinadi?

Yodlash uchun

CanActivateFn + inject() = zamonaviy guard. UrlTree = redirect.

provideRouter, provideHttpClient

Middle

Nima bu?

provideRouter(routes) va provideHttpClient() — NgModule import o'rniga standalone bootstrap'da provider funksiyalar. Router va HTTP client'ni markaziy, tree-shakable tarzda ro'yxatdan o'tkazish. Interceptor, withFetch, withInterceptors ham shu API orqali.

Kod misoli

import { bootstrapApplication } from '@angular/platform-browser';
import { provideRouter, withComponentInputBinding } from '@angular/router';
import {
  provideHttpClient,
  withInterceptors,
  withFetch,
} from '@angular/common/http';

bootstrapApplication(AppComponent, {
  providers: [
    provideRouter(routes, withComponentInputBinding()),
    provideHttpClient(
      withFetch(), // fetch API (SSR uchun yaxshi)
      withInterceptors([authInterceptor, loggingInterceptor])
    ),
  ],
});

Imtihonda

  • provideRouter va RouterModule.forRoot farqi?
  • withFetch() nima uchun?

Yodlash uchun

provideRouter / provideHttpClient = standalone bootstrap provider'lari.

withComponentInputBinding — route param'larni @Input() sifatida component'ga uzatish (Angular 16+ stable).
Prev
Angular 14
Next
Angular 16