Lorsque j'essaie ViewChild, j'obtiens l'erreur. L'erreur est "Un argument pour 'opts' n'a pas été fourni."
@ViewChild donne à la fois l'erreur.
import { Component, OnInit, ElementRef, ViewChild, Output, EventEmitter } from '@angular/core';
import { Ingredient } from 'src/app/shared/ingredient.model';
@Component({
selector: 'app-shopping-edit',
templateUrl: './shopping-edit.component.html',
styleUrls: ['./shopping-edit.component.css']
})
export class ShoppingEditComponent implements OnInit {
@ViewChild('nameInput') nameInputRef: ElementRef;
@ViewChild('amountInput') amountInputRef: ElementRef;
@Output() ingredientAdded = new EventEmitter<Ingredient>();
constructor() {}
ngOnInit() {
}
onAddItem() {
const ingName = this.nameInputRef.nativeElement.value;
const ingAmount = this.amountInputRef.nativeElement.value;
const newIngredient = new Ingredient(ingName, ingAmount);
this.ingredientAdded.emit(newIngredient);
}
}
ts (11,2): erreur TS2554: 2 arguments attendus, mais 1 obtenu.
angular
typescript
débordement de pile
la source
la source
Réponses:
Dans Angular 8, ViewChild prend 2 paramètres
la source
{ static: true }
.ng update
vous aidera à le faire automatiquement si nécessaire. Ou, si vous avez déjà mis à jour vos dépendances vers Angular 8, cette commande vous aidera à migrer votre code:ng update @angular/core --from 7 --to 8 --migrate-only
true
, mais s'il peut attendre après l'initialisation, il peut l'êtrefalse
, ce qui signifie qu'il ne sera pas disponible jusqu'à ngAfterViewInit / ngAfterContentInit.Angulaire 8
Dans Angular 8, ViewChild a un autre paramètre
Vous pouvez en savoir plus ici et ici
Angulaire 9
La
Angular 9
valeur par défaut eststatic: false
donc n'a pas besoin de fournir de paramètres sauf si vous souhaitez utiliser{static: true}
la source
@ContentChild('foo', {static: false}) foo !: ElementRef;
. Je suis curieux de savoir le point d'exclamation. Est-ce aussi quelque chose de nouveau avec Angular 8?Dans Angular 8,
ViewChild
prend 2 paramètres:Essayez comme ceci:
Explication:
Si vous définissez statique false , le composant TOUJOURS est initialisé après l'initialisation de la vue à temps pour les
ngAfterViewInit/ngAfterContentInit
fonctions de rappel.Si vous définissez static true , l'initialisation aura lieu lors de l'initialisation de la vue à
ngOnInit
Par défaut, vous pouvez utiliser
{ static: false }
. Si vous créez une vue dynamique et souhaitez utiliser la variable de référence du modèle, vous devez utiliser{ static: true}
Pour plus d'informations, vous pouvez lire cet article
Dans la démo, nous allons faire défiler jusqu'à un div en utilisant la variable de référence du modèle.
Avec
{ static: true }
, nous pouvons utiliserthis.scrollTo.nativeElement
dansngOnInit
, mais avec{ static: false }
,this.scrollTo
seraundefined
dansngOnInit
, donc nous ne pouvons accéder qu'àngAfterViewInit
la source
c'est parce que la vue enfant nécessite deux arguments, essayez comme ceci
la source
Dans Angular 8, ViewChild prend toujours 2 paramètres et les seconds paramètres ont toujours statique: vrai ou statique: faux
Vous pouvez essayer comme ceci:
Également
static: false
va être le comportement de secours par défaut dans Angular 9.Ce qui est statique faux / vrai: Donc, en règle générale, vous pouvez opter pour les éléments suivants:
{ static: true }
doit être défini lorsque vous souhaitez accéder à ViewChild dans ngOnInit.{ static: false }
n'est accessible que dans ngAfterViewInit. C'est aussi ce que vous voulez faire lorsque vous avez une directive structurelle (c'est-à-dire * ngIf) sur votre élément dans votre modèle.la source
Regex pour remplacer tout via IDEA (testé avec Webstorm)
Trouver:
\@ViewChild\('(.*)'\)
Remplacer:
\@ViewChild\('$1', \{static: true\}\)
la source
vous devez utiliser un deuxième argument avec ViewChild comme ceci:
la source
Utilisez ceci
la source
Dans Angular 8, ViewChild a un autre paramètre
@ViewChild ('nameInput', {static: false}) composant
J'ai résolu mon problème comme ci-dessous
@ViewChild (MatSort, {statique: faux}) sort: MatSort;
la source
Cela a également résolu mon problème.
la source