Trong hầu hết các trường hợp, bạn sẽ muốn sử dụng {static: false}
. Đặt nó như thế này sẽ đảm bảo các kết quả truy vấn phụ thuộc vào độ phân giải ràng buộc (như chỉ thị cấu trúc *ngIf, etc...
) sẽ được tìm thấy.
Ví dụ về thời điểm sử dụng static: false
:
@Component({
template: `
<div *ngIf="showMe" #viewMe>Am I here?</div>
<button (click)="showMe = !showMe"></button>
`
})
export class ExampleComponent {
@ViewChild('viewMe', { static: false })
viewMe?: ElementRef<HTMLElement>;
showMe = false;
}
Đây static: false
sẽ là hành vi dự phòng mặc định trong Angular 9. Đọc thêm tại đây và đây
Các { static: true }
tùy chọn được giới thiệu để hỗ trợ việc tạo ra lượt xem được nhúng một cách nhanh chóng. Khi bạn đang tạo một chế độ xem một cách linh hoạt và muốn xác nhận TemplateRef
, bạn sẽ không thể làm như vậy vì ngAfterViewInit
nó sẽ gây ra ExpressionHasChangedAfterChecked
lỗi. Đặt cờ tĩnh thành true sẽ tạo chế độ xem của bạn trong ngOnInit.
Tuy nhiên:
Trong hầu hết các trường hợp khác, thực hành tốt nhất là sử dụng {static: false}
.
Mặc dù vậy, hãy lưu ý rằng { static: false }
tùy chọn sẽ được đặt mặc định trong Angular 9. Điều đó có nghĩa là việc đặt cờ tĩnh không còn cần thiết nữa, trừ khi bạn muốn sử dụng static: true
tùy chọn.
Bạn có thể sử dụng ng update
lệnh cli góc để tự động nâng cấp cơ sở mã hiện tại của bạn.
Để biết hướng dẫn di chuyển và thậm chí nhiều thông tin hơn về điều này, bạn có thể kiểm tra tại đây và đây
Sự khác biệt giữa các truy vấn tĩnh và động là gì?
Tùy chọn tĩnh cho các truy vấn @ViewChild () và @ContentChild () xác định khi kết quả truy vấn có sẵn.
Với các truy vấn tĩnh (static: true), truy vấn sẽ giải quyết khi chế độ xem được tạo, nhưng trước khi phát hiện thay đổi chạy. Tuy nhiên, kết quả sẽ không bao giờ được cập nhật để phản ánh các thay đổi đối với chế độ xem của bạn, chẳng hạn như thay đổi đối với các khối ng If và ngFor.
Với các truy vấn động (static: false), truy vấn sẽ giải quyết sau ngAfterViewInit () hoặc ngAfterContentInit () cho @ViewChild () và @ContentChild (). Kết quả sẽ được cập nhật để thay đổi chế độ xem của bạn, chẳng hạn như thay đổi đối với các khối ng If và ngFor.