У більшості випадків ви хочете використовувати {static: false}
. Встановивши його таким чином, ви знайдете збіги запитів, які залежать від обов'язкової прив'язки (наприклад, структурних директив *ngIf, etc...
).
Приклад використання 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;
}
Це static: false
буде стандартною поведінкою за замовчуванням у куті 9. Детальніше тут і тут
{ static: true }
Опція була введена для підтримки створення вбудованих поглядів на льоту. Коли ви створюєте представлення динамічно і хочете отримати доступ до нього TemplateRef
, ви не зможете це зробити, ngAfterViewInit
оскільки це призведе до ExpressionHasChangedAfterChecked
помилки. Встановлення статичного прапора в істинне створить ваш погляд у ngOnInit.
Тим не менш:
У більшості інших випадків найкращою практикою є використання {static: false}
.
Будьте в курсі, що { static: false }
параметр буде встановлений за замовчуванням у куті 9. Це означає, що встановити статичний прапор більше не потрібно, якщо ви не хочете використовувати static: true
параметр.
Ви можете використовувати команду angular cli ng update
для автоматичного оновлення поточної бази коду.
Для посібника з міграції та ще більше інформації про це ви можете перевірити тут і тут
Чим відрізняються статичні та динамічні запити?
Статичний параметр для запитів @ViewChild () та @ContentChild () визначає, коли результати запиту стануть доступними.
За допомогою статичних запитів (static: true) запит вирішується, як тільки створений вид, але перед тим, як розпочнеться виявлення змін. Однак результат ніколи не буде оновлюватися, щоб відображати зміни у вашому представленні, наприклад зміни блоків ngIf та ngFor.
За допомогою динамічних запитів (статичні: хибні) запит вирішується після ngAfterViewInit () або ngAfterContentInit () для @ViewChild () та @ContentChild () відповідно. Результат буде оновлений для змін у вашому представленні, таких як зміни блоків ngIf та ngFor.