ошибка TS2554: ожидается 2 аргумента, но получено 1 с @ViewChild - PullRequest
16 голосов
/ 06 июня 2019

Я использовал ViewChild следующим образом:

@ViewChild("InternalMedia") localStream;
@ViewChild("emoji") mEmoji;

Который работал нормально до angular-7.x

как только я обновил его до angular-8.x, он начал выдавать следующую ошибку

.../call_emoji/component.ts(41,4): error TS2554: Expected 2 arguments, but got 1.

Я проверил https://angular.io/api/core/ViewChild, и когда я изменил его на

@ViewChild("InternalMedia",{static:false}) remoteStream;

Это работает. Я не понимаю, что делает static, и какова должна быть ценность, чтобы работать как предыдущий?

Ответы [ 2 ]

16 голосов
/ 25 июня 2019

После перехода на Angular 8 вы должны вручную указать, является ли он статическим или нет

@ViewChild(QuilldEditorComponent, {static: true}) quillEditorComponentInstance;

Если у вас есть дополнительные вопросы, задайте их или для получения более подробной информации, пожалуйста, прочитайте эту проблему https://github.com/angular/angular-cli/issues/14553 илипосмотрите официальную документацию https://angular.io/guide/static-query-migration

// query results available in ngOnInit
@ViewChild('foo', {static: true}) foo: ElementRef; 

OR

// query results available in ngAfterViewInit
@ViewChild('foo', {static: false}) foo: ElementRef;

9 голосов
/ 06 июня 2019

Согласно документации Angular статические проверки

разрешать или не разрешать результаты запроса перед выполнением обнаружения изменений (т.е. возвращать только статические результаты).Если эта опция не указана, компилятор вернется к своему поведению по умолчанию, которое будет использовать результаты запроса для определения времени разрешения запроса.Если какие-либо результаты запроса находятся во вложенном представлении (например, * ngIf), запрос будет разрешен после выполнения обнаружения изменений.В противном случае он будет разрешен до запуска обнаружения изменений.

Фактически это определяет, когда будет запущен запрос для извлечения элемента.Если установлено значение false, запрос будет выполняться после любых обнаруженных изменений.Если установлено значение true, оно будет запущено немедленно.

Для получения дополнительной информации и почему эта опция включена, см. эту проблему Github .

Поведение, которое вы, вероятно, ищетедолжен установить static в ложь.Это приведет к старому поведению.Однако, если представление вашего компонента не является динамическим (например, вы не используете * ngIf), вы сможете безопасно установить его в значение true.

...