hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Angular
  • Học lập trình
  • Lập trình Javascript
Dynamic Component trong Angular

Dynamic Component trong Angular

  • 15-01-2024
  • Toanngo92
  • 0 Comments

Mục lục

  • Mở đầu
  • Coding Practice
  • Concepts
  • ViewContainerRef
  • ComponentFactory
  • ComponentFactoryResolver

Mở đầu

Qua những bài trước, bạn đã hiểu cách tạo các thành phần con và cha cũng như cách chúng tương tác. Bây giờ, hãy xem xét một tình huống cụ thể: Component A là cha của Component B, có dạng như sau:

Trong nhiều tình huống, chúng ta mong muốn có khả năng thay đổi thành phần hiển thị trong quá trình chạy ứng dụng, không chỉ giới hạn cứng một Component B nhất định. Có thể là Component B hoặc Component C tùy thuộc vào logic của ứng dụng. Hoặc trong một tình huống khác, chúng ta muốn người dùng thực hiện một hành động nào đó trong Component A trước khi hiển thị Component B.

Trong trường hợp thông thường, Component B thường được xác định cứng trong template là con của A.

Vậy làm thế nào để load một Component khác vào trong Component A trong quá trình chạy ứng dụng? Điều này sẽ được giải quyết thông qua Dynamic Component, chủ đề mà chúng ta sẽ khám phá trong bài viết hôm nay.

Coding Practice

Bài viết này hướng dẫn về việc sử dụng Dynamic Components trong Angular để load các thành phần động trong quá trình runtime. Dưới đây là một số bước chính:

Bước 1: Khởi tạo Dự án

ng new dynamic-component-demo

Bước 2: Tạo Các Components

ng g c example-container
ng g c dynamic-content-one
ng g c dynamic-content-two

Thêm app-example-container vào template của app.component.html.

Bước 3: Code Container Components

// example-container.component.ts
import { Component, OnInit, ViewChild, ViewContainerRef, ComponentFactoryResolver } from "@angular/core";
import { DynamicContentOneComponent } from "../dynamic-content-one/dynamic-content-one.component";
import { DynamicContentTwoComponent } from "../dynamic-content-two/dynamic-content-two.component";

@Component({
  selector: "app-example-container",
  templateUrl: "./example-container.component.html",
  styleUrls: ["./example-container.component.scss"],
})
export class ExampleContainerComponent implements OnInit {
  @ViewChild("dynamicComponent", { read: ViewContainerRef, static: true })
  containerRef: ViewContainerRef;

  constructor(private cfr: ComponentFactoryResolver) {}

  ngOnInit() {}

  addDynamicCompOne() {
    const componentFactory = this.cfr.resolveComponentFactory(DynamicContentOneComponent);
    const componentRef = this.containerRef.createComponent(componentFactory);
  }

  addDynamicCompTwo() {
    const componentFactory = this.cfr.resolveComponentFactory(DynamicContentTwoComponent);
    const componentRef = this.containerRef.createComponent(componentFactory);
  }
}

Bước 4: Thêm Các Dynamic Components Vào entryComponents

// app.module.ts
@NgModule({
  declarations: [
    AppComponent,
    ExampleContainerComponent,
    DynamicContentOneComponent,
    DynamicContentTwoComponent,
  ],
  imports: [BrowserModule],
  providers: [],
  bootstrap: [AppComponent],
  entryComponents: [DynamicContentOneComponent, DynamicContentTwoComponent],
})
export class AppModule {}

Bước 5: Clear Các Dynamic Components

Thêm nút “Clear” để xóa các component đã load.

// example-container.component.ts
clearDynamicComp() {
  this.containerRef.clear();
}

Bước 6: Tương Tác Với Các Dynamic Components

Tương tác giữa container và dynamic components tương tự như tương tác giữa component cha và con.

// dynamic-content-one.component.ts
@Input()
data: string;
<!-- dynamic-content-one.component.html -->
<h1>DYNAMIC CONTENT 1</h1>
<p>++++++{{data}}+++++++++</p>
// example-container.component.ts
addDynamicCompOne() {
  const componentFactory = this.cfr.resolveComponentFactory(DynamicContentOneComponent);
  const componentRef = this.containerRef.createComponent(componentFactory);
  componentRef.instance.data = "INPUT DATA 1";
}

Bước 7: Cập Nhật Với Angular Ivy Lazy Load

Cập nhật code để sử dụng tính năng lazy load với Angular Ivy.

// example-container.component.ts
async addDynamicCompOne() {
  const { DynamicContentOneComponent } = await import('../dynamic-content-one/dynamic-content-one.component');
  const componentFactory = this.cfr.resolveComponentFactory(DynamicContentOneComponent);
  const componentRef = this.containerRef.createComponent(componentFactory);
  componentRef.instance.data = "INPUT DATA 1";
}

Đây là một hướng dẫn đơn giản về việc sử dụng Dynamic Components trong Angular để load và quản lý các thành phần động trong ứng dụng.

Concepts

ViewContainerRef

ViewContainerRef là một loại “hộp” trong Angular, giúp chúng ta quản lý việc tạo và quản lý các view trong ứng dụng. Nó giống như một “khu vực” từ nơi chúng ta có thể tạo ra các thành phần (components) và views (các hiển thị) trong ứng dụng.

Khi chúng ta tạo một Host View (một loại view tương ứng với component), hoặc một Embedded View (được tạo từ một TemplateRef), ViewContainerRef chính là nơi chúng ta có thể “đặt” chúng. Nó hỗ trợ chúng ta trong việc quản lý vị trí và vòng đời của các view này.

ViewContainerRef cũng có khả năng chứa các container khác bên trong nó, giống như cách ng-container hoạt động. Điều này tạo nên một cấu trúc cây, giúp quản lý và nhóm hóa các view và components trong ứng dụng.

Nói một cách đơn giản, bạn có thể xem ViewContainerRef như một “đối tượng chứa” giúp bạn thêm và quản lý các thành phần và hiển thị chúng trong ứng dụng của mình.

ComponentFactory

ComponentFactory là một “nhà máy” cho việc tạo ra các components một cách động trong Angular. Nó chủ yếu được sử dụng để tạo ra một instance của một component dựa trên thông tin từ ComponentFactoryResolver.

Khi chúng ta cần tạo một component trong quá trình chạy ứng dụng, chúng ta sử dụng ComponentFactory để nhận thông tin về cách component đó được xây dựng và cách chúng ta có thể tạo ra một phiên bản của nó.

Nói một cách đơn giản, ComponentFactory có thể được coi là “mô-đun sản xuất” giúp chúng ta sản xuất các components tại thời điểm chạy của ứng dụng Angular.

ComponentFactoryResolver

ComponentFactoryResolver là một công cụ trong Angular giúp chúng ta xác định cách tạo một ComponentFactory từ một loại component cụ thể. Nó nhận các thông tin về component và sau đó chúng ta có thể sử dụng ComponentFactory để tạo ra các phiên bản của component đó.

Nói một cách đơn giản, ComponentFactoryResolver là người giúp chúng ta “giải quyết bí ẩn” về cách tạo một ComponentFactory từ một loại component. Khi chúng ta cần tạo các phiên bản của một component trong quá trình chạy ứng dụng, chúng ta sẽ sử dụng ComponentFactoryResolver để lấy thông tin cần thiết và sau đó sử dụng ComponentFactory để tạo các phiên bản thực tế của component đó.

Khi đã có ComponentFactory, chúng ta có thể sử dụng ViewContainerRef để chèn component vào vị trí cụ thể trong ứng dụng của chúng ta, chẳng hạn như trong một div hoặc bất kỳ nơi nào chúng ta muốn.

Bài viết liên quan:

Sắp xếp sủi bọt – Bubble Sort
TypeScript với Kiểu Dữ Liệu Cơ Bản – 3
TypeScript với Kiểu Dữ Liệu Cơ Bản – 2
TypeScript với Kiểu Dữ Liệu Cơ Bản – 1
Typescript cơ bản và cách cài đặt cho người mới
Thực Hành Micro Frontends
Async Validator trong Angular Form
Reactive Forms Trong Angular (Phần 2)
Reactive Forms Trong Angular (Phần 1)
Template-driven Forms Trong Angular (Phần 2)
Template-driven Forms Trong Angular (Phần 1)
Guards and Resolvers (Phần 3)

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

2. PHÂN TÍCH VÀ ĐẶC TẢ HỆ THỐNG

3. THIẾT KẾ HỆ THỐNG

1. TỔNG QUAN KIẾN THỨC THỰC HÀNH TRIỂN KHAI DỰ ÁN CÔNG NGHỆ THÔNG TIN

Hướng dẫn tự cài đặt n8n comunity trên CyberPanel, trỏ tên miền

Mẫu prompt tạo mô tả chi tiết bối cảnh

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×