В большинстве случаев вы захотите использовать {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
Angular 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.