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
Template Variable và ViewChild/ViewChildren trong Angular

Template Variable và ViewChild/ViewChildren trong Angular

  • 21-12-2023
  • Toanngo92
  • 0 Comments

Mục lục

  • Các phần tử cha tương tác với phần tử con thông qua biến cục bộ
  • Template variable sẽ là instance của class nào?
  • Parent class with ViewChild
  • Parent class with ViewChildren

Các phần tử cha tương tác với phần tử con thông qua biến cục bộ

Để tương tác giữa một phần tử con và phần tử cha trong Angular, chúng ta có thể sử dụng biến cục bộ (Template variable) để truy cập các phương thức và thuộc tính của component con từ component cha.

Giả sử chúng ta có AppComponent chứa một phần template như sau:

<button (click)="doSomething()">Toggle</button>
<br />
<app-toggle #toggleComp></app-toggle>

Để gọi phương thức toggle() của component ToggleComponent từ AppComponent, chúng ta sử dụng Template variable #toggleComp và kết hợp với sự kiện click của button:

<button (click)="toggleComp.toggle()">Toggle</button>
<br />
<app-toggle #toggleComp></app-toggle>

Cú pháp của Template variable là sử dụng #varName và chúng ta có thể tạo nhiều biến trong template để tham chiếu đến các phần tử khác nhau.

Tương tự như khi sử dụng NgIf-Else, chúng ta cũng có thể sử dụng Template variable để tham chiếu đến các ng-template và truyền chúng vào directive như NgIf hoặc NgIfElse:

<div *ngIf="user.age >= 13; else noPG13">Bạn có thể xem nội dung PG-13</div>
<ng-template #noPG13>
  <div>Bạn không thể xem nội dung PG-13</div>
</ng-template>

Điều này cho phép chúng ta tận dụng biến cục bộ để truy cập và tương tác giữa các phần tử trong cùng một template, giúp quản lý và điều khiển các component một cách linh hoạt.

Template variable sẽ là instance của class nào?

Một Template variable trong Angular có thể là một instance của một HTMLElement hoặc một Component. Khi không sử dụng cú pháp #varName="exportAsOfDirectiveOrComponent", Template variable sẽ cố gắng lấy về một đối tượng tương ứng. Với HTMLElement, đó sẽ là HTMLElement; và với Component, đó sẽ là một instance của Component đó.

Ví dụ, trong trường hợp của FormsModule và ngModel, chúng ta sử dụng cú pháp:

<form #nameForm="ngForm">
  <input
    type="text"
    class="form-control"
    required
    [(ngModel)]="model.name"
    name="name"
    #name="ngModel"
  />
  <button>Submit</button>
</form>

Ở đây, chúng ta tạo ra hai Template variable:

  • nameForm: mong muốn lấy instance của directive có exportAs là ngForm.
  • name: mong muốn lấy instance của directive có exportAs là ngModel.

Sử dụng #varName="exportAsOfDirectiveOrComponent" giúp chúng ta yêu cầu lấy chính xác instance của directive hoặc component đó. Nếu không yêu cầu cụ thể, các Template variable sẽ trả về HTMLElement thông thường.

Qua cách sử dụng Template variable và cú pháp exportAs, chúng ta có khả năng lấy đối tượng mong muốn từ các directive và components trong Angular templates để thực hiện các thao tác tương ứng.

Parent class with ViewChild

Để truy cập Template variable trong class của một component, chúng ta có thể sử dụng @ViewChild. Điều này cho phép chúng ta truy cập và tương tác với các phần tử hoặc component từ logic của component, không chỉ từ template.

Ví dụ, nếu chúng ta muốn gọi đến Template variable trong class của một component, chúng ta có thể sử dụng @ViewChild như sau:

<button (click)="toggleInside()">Toggle inside class</button>
<br />
<br />
<app-toggle #toggleComp></app-toggle>
export class AppComponent {
  @ViewChild("toggleComp") toggleComp: ToggleComponent;

  toggleInside() {
    this.toggleComp.toggle();
  }
}

Nếu chúng ta sử dụng @ViewChild cho một HTMLElement, chúng ta sẽ nhận được một ElementRef thay vì một HTMLElement như khi sử dụng trong template.

<div #chartContainer></div>
export class AppComponent {
  @ViewChild("chartContainer") container: ElementRef<HTMLDivElement>;
}

@ViewChild cũng cho phép chúng ta truyền vào các cấu hình tùy chỉnh, như read hoặc static, để định rõ loại instance cần lấy và cách thức truy cập.

export class NameFormComponent implements OnInit {
  model = {
    name: "Tiep Phan",
  };

  @ViewChild("nameForm", {
    read: ElementRef,
    static: true,
  })
  form: ElementRef<HTMLFormElement>;

  ngOnInit() {
    console.log(this.form);
  }
}

Qua cách sử dụng @ViewChild với cấu hình tùy chỉnh như read và static, chúng ta có thể xác định loại instance cần lấy và quyết định thời điểm tiến trình của nó sẽ được chạy, giúp tương tác và điều khiển các phần tử và component từ logic của component một cách linh hoạt và hiệu quả.

Parent class with ViewChildren

Để truy vấn một danh sách các phần tử trong Angular, chúng ta có thể sử dụng ViewChildren. ViewChildren trả về một QueryList trước khi hàm ngAfterViewInit được gọi. QueryList này chứa các thuộc tính và phương thức cho phép chúng ta lắng nghe các sự kiện (Observable).

Ví dụ, nếu chúng ta muốn truy vấn một danh sách các ToggleComponent, chúng ta có thể sử dụng ViewChildren như sau:

<app-toggle></app-toggle>
<br />
<app-toggle></app-toggle>
import { ViewChildren, QueryList, AfterViewInit } from '@angular/core';
import { ToggleComponent } from './toggle.component';

export class AppComponent implements AfterViewInit {
  @ViewChildren(ToggleComponent) toggleList: QueryList<ToggleComponent>;

  ngAfterViewInit() {
    console.log(this.toggleList);
  }
}

Trong đoạn mã trên, chúng ta đã sử dụng @ViewChildren để truy vấn danh sách các ToggleComponent trong template của AppComponent. Khi hàm ngAfterViewInit được gọi, this.toggleList sẽ chứa danh sách các ToggleComponent tương ứng và chúng ta có thể thực hiện các thao tác tiếp theo trên QueryList này.

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
Dynamic Component trong Angular
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)

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

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

Một số cải tiến trong ASP.NET Core, Razor Page, Model Binding, Gabbage collection

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
×