В большинстве случаев вы захотите использовать {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: falseAngular 9 будет использоваться резервное поведение по умолчанию. Подробнее читайте здесь и здесь
{ static: true }Опция была введена для поддержки создания встраиваемых взглядов на лету. Когда вы динамически создаете представление и хотите получить доступ к нему TemplateRef, вы не сможете сделать это, так ngAfterViewInitкак это приведет к ExpressionHasChangedAfterCheckedошибке. Установка статического флага в true создаст ваше представление в ngOnInit.
тем не менее:
В большинстве других случаев наилучшей практикой является использование {static: false}.
Имейте { static: false }в виду, что в Angular 9 этот параметр будет установлен по умолчанию. Это означает, что установка статического флага больше не требуется, если только вы не хотите использовать этот static: trueпараметр.
Вы можете использовать команду angular cli ng updateдля автоматического обновления текущей базы кода.
Для руководства по миграции и даже больше информации об этом вы можете проверить здесь и здесь
В чем разница между статическими и динамическими запросами?
Статическая опция для запросов @ViewChild () и @ContentChild () определяет, когда станут доступны результаты запроса.
В случае статических запросов (static: true) запрос разрешается после создания представления, но до запуска обнаружения изменений. Результат, однако, никогда не будет обновляться, чтобы отражать изменения в вашем представлении, такие как изменения в блоках ngIf и ngFor.
При динамических запросах (static: false) запрос разрешается после ngAfterViewInit () или ngAfterContentInit () для @ViewChild () и @ContentChild () соответственно. Результат будет обновлен для изменений в вашем представлении, таких как изменения блоков ngIf и ngFor.