/angular-guide > _

შექმნა და გამოყენება

კომპონენტების (ისევე, როგორც დირექტივებისა და ფაიფების) შექმნა შეიძლება მათი შემქმნელი დეკორატორის კონფიგურაციის ობიექტში standalone თვისებისtrue-ზე დაყენებით:

@Component({
  standalone: true,
  selector: "image-grid",
  imports: [ImageGridComponent],
  templateUrl: "./image-grid.component.ts",
})
export class ImageGridComponent {
  // component logic
}

თუ ამ კომპონენტის სადმე გამოყენება დაგვჭირდება, მას არ ვარეგისტრირებთ NgModule-ში, არამედ პირდაპირ ვაიმპორტებთ იმ დამოუკიდებელ კომპონენტში, რომელშიც ის დაგვჭირდება:

@Component({
  standalone: true,
  selector: "photo-gallery",
  imports: [ImageGridComponent],
  template: ` ... <image-grid [images]="imageList"></image-grid> `,
})
export class PhotoGalleryComponent {
  // component logic
}

imports ველში ასევე შეიძლება დამოუკიდებელი ფაიფებისა და დირექტივების შემოტანაც.

NgModule-ების შემოტანა დამოუკიდებელ კომპონენტებში

თუ ჩვენ აპლიკაციაში გვჭირდება ფუნქციონალი, რომლებიც არ არიან standalone და მოდულებში არიან შეკრული, მაშინ შეგვიძლია ამ მოდულების კომპონენტში პირდაპირ შემოტანა imports მასივში:

@Component({
  standalone: true,
  selector: "photo-gallery",
  // an existing module is imported directly into a standalone component
  imports: [MatButtonModule],
  template: `
    ...
    <button mat-button>Next Page</button>
  `,
})
export class PhotoGalleryComponent {
  // logic
}

ასე MatButtonModule-ში არსებული ყველა დაექსპორტებული კომპონენტი, ფაიფი თუ დირექტივი ხელმისაწვდომია PhotoGalleryComponent-ში.

დამოუკიდებელი კომპონენტის შეტანა NgModule-ში

ანალოგიურად, შესაძლებელია დამოუკიდებელი კომპონენტების შეტანა NgModule-ზე დაფუძნებულ კონტექსტშიც. ეს უზრუნველყოფს შესაძლებლობას, რომ ძველი აპლიკაციები ეტაპობრივად და მარტივად გადავიყვანოთ NgModule სისტემიდან standalone სისტემაზე.

@NgModule({
  declarations: [AlbumComponent],
  exports: [AlbumComponent],
  imports: [PhotoGalleryComponent],
})
export class AlbumModule {}

თუმცა PhotoGalleryComponent არის standalone, მისი დაიმპორტება ძველებური მეთოდითაც შეიძლება.

ასერომ, დამოუკიდებელი კომპონენტები არ მოდიან კონფლიქტში ანგულარის წინა ვერსიის მოდულებთან. რაღაც თვალსაზრისით, ახლა თითოეული კომპონენტი არის თვითკმარი მოდული.

Bootstrapping

ასეთი სისტემით main.ts-ში bootstrap განსხვავებულად ხდება. იმის მაგივრად, რომ ეს მოხდეს მთლიან მოდულზე, გამოიყენება ფუნქცია bootstrapApplication რომელიც აპლიკაციის მთავარ დამოუკიდებელ კომპონენტს იღებს:

import { bootstrapApplication } from "@angular/platform-browser";
import { PhotoAppComponent } from "./app/photo.app.component";

bootstrapApplication(PhotoAppComponent);

მეორე არგუმენტად ობიექტში, providers მასივში შესაძლებელია ისეთი მოდულების შემოტანა რომლებიც (ძველი მიდგომით) forRoot ფუნქციაზე დაძახებას საჭიროებენ:

import { LibraryModule } from "ngmodule-based-library";

bootstrapApplication(PhotoAppComponent, {
  providers: [importProvidersFrom(LibraryModule.forRoot())],
});

აქვე შეიძლება DI-ს კონფიგურაციაც:

bootstrapApplication(PhotoAppComponent, {
  providers: [
    {
      provide: BACKEND_URL,
      useValue: "https://photoapp.looknongmodules.com/api",
    },
    // ...
  ],
});