FresherKỹ thuậtAngular
@if làm gì trong template Angular và nó thay thế *ngIf như thế nào?
Thử trả lời trước
Đáp án mẫu
@if là khối control flow có sẵn, chỉ render nội dung khi điều kiện đúng. Nó là một phần cú pháp template nên bạn không cần import gì. Nó thay thế directive *ngIf cũ, vốn phải thêm NgIf vào imports.
@if (user(); as u) {
<p>Hello {{ u.name }}</p>
} @else if (loading()) {
<p>Loading...</p>
} @else {
<p>Please sign in</p>
}
So với *ngIf:
@else ifvà@elselà một phần của cú pháp, nên không còn phải dùngelsekèm template reference variable.asgiữ giá trị đã tính trong một biến cục bộ.- Compiler xử lý trực tiếp, nên type checking tốt hơn và ít code chạy lúc runtime hơn.
Code mới nên dùng @if. Bạn vẫn sẽ gặp *ngIf ở các dự án cũ, và có schematic (ng generate @angular/core:control-flow) để migrate tự động.
Với template mới, hãy ưu tiên @if.
Ý chính
- @if là cú pháp có sẵn và không cần import
- @else if và @else nằm trong cùng khối
- as lưu giá trị đã tính
- *ngIf là cú pháp cũ và có schematic để migrate
Câu hỏi nối tiếp thường gặp
- Tại sao @for bắt buộc phải có biểu thức track?
Lỗi thường gặp
- Viết *ngIf trong component mới mà không import NgIf