angular - Fehler TS2554: Erwartet 2 Argumente, aber 1 erhalten mit @ViewChild
Ich habe ViewChild wie folgt verwendet:
@ViewChild("InternalMedia") localStream;
@ViewChild("emoji") mEmoji;
Das funktionierte einwandfrei bis Angular 7.x
Sobald ich es auf Angular-8.x aktualisiert habe, begann es, folgenden Fehler auszugeben
.../call_emoji/component.ts(41,4): error TS2554: Expected 2 arguments, but got 1.
Ich habe https://angular.io/api/core/ViewChild überprüft und als ich es änderte zu
@ViewChild("InternalMedia",{static:false}) remoteStream;
Es funktioniert. Ich verstehe nicht, was static macht und welchen Wert es haben sollte, um wie zuvor zu funktionieren?
Antwort #1
Nach der Migration zu Angular 8 sollten Sie manuell angeben, ob es statisch ist oder nicht
@ViewChild(QuilldEditorComponent, {static: true}) quillEditorComponentInstance;
Wenn Sie weitere Fragen haben, stellen Sie sie oder lesen Sie für weitere Details dieses Problem https://github.com/angular/angular-cli/issues/14553 oder werfen Sie einen Blick auf die offizielle Dokumentation 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;
Antwort #2
Laut der Angular-Dokumentation statische Prüfungen
ob die Abfrageergebnisse vor dem Ablauf der Änderungserkennung aufgelöst werden sollen oder nicht (d. h. nur statische Ergebnisse zurückgeben). Wenn diese Option nicht angegeben wird, fällt der Compiler auf sein Standardverhalten zurück, bei dem Abfrageergebnisse verwendet werden, um den Zeitpunkt der Abfrageauflösung zu bestimmen. Wenn sich Abfrageergebnisse in einer verschachtelten Ansicht befinden (z. B. *ngIf), wird die Abfrage nach Ablauf der Änderungserkennung aufgelöst. Andernfalls wird sie vor Ablauf der Änderungserkennung aufgelöst.
Dies bestimmt effektiv, wann die Abfrage ausgeführt wird, um das Element abzurufen. Wenn auf false gesetzt, wird die Abfrage nach jeglichen Änderungsprüfungen ausgeführt. Wenn auf true gesetzt, wird sie sofort ausgeführt.
Für weitere Informationen und warum diese Option enthalten ist, siehe bitte dieses Github-Problem.
Das Verhalten, das Sie wahrscheinlich suchen, besteht darin, static auf false zu setzen. Dies führt zum alten Verhalten. Wenn die Ansicht Ihrer Komponente jedoch nicht dynamisch ist (zum Beispiel verwenden Sie kein *ngIf), sollten Sie es sicher auf true setzen können.
