Message d'erreur sur les peluches:
src / app / detail / edit / edit.component.ts [111, 5]: les instructions for (... in ...) doivent être filtrées avec une instruction if
Extrait de code (Il s'agit d'un code de travail. Il est également disponible dans la section de validation du formulaire angular.io ):
for (const field in this.formErrors) {
// clear previous error message (if any)
this.formErrors[field] = '';
const control = form.get(field);
if (control && control.dirty && !control.valid) {
const messages = this.validationMessages[field];
for (const key in control.errors) {
this.formErrors[field] += messages[key] + ' ';
}
}
}
Une idée comment corriger cette erreur de peluche?
angular
angular2-forms
angular-cli
tslint
choopage - Jek Bao
la source
la source
Réponses:
Pour expliquer le problème réel signalé par tslint, une citation de la documentation JavaScript du for ... in :
Donc, fondamentalement, cela signifie que vous obtiendrez des propriétés que vous ne vous attendez pas à obtenir (à partir de la chaîne de prototypes de l'objet).
Pour résoudre ce problème, nous devons itérer uniquement sur les propriétés propres des objets. Nous pouvons le faire de deux manières différentes (comme suggéré par @Maxxx et @Qwertiy).
Première solution
Ici, nous utilisons Object.Keys () méthode qui renvoie un tableau des propriétés énumérables d'un objet donné, dans le même ordre que celui fourni par une boucle for ... in (la différence étant qu'une boucle for-in énumère les propriétés dans la chaîne prototype également).
Deuxième solution
Dans cette solution, nous itérons toutes les propriétés de l'objet, y compris celles de sa chaîne de prototypes, mais utilisons la méthode Object.prototype.hasOwnProperty () , qui renvoie un booléen indiquant si l'objet possède la propriété spécifiée comme propriété propre (non héritée), pour filtrer les propriétés héritées sur.
la source
Object.keys
c'est ES5. La seule chose d'ES6 est la boucle for-of. Nous pouvons parcourir le tableau en boucle habituelle de 0 à sa longueur et ce serait ES5.this.formErrors
est nul,for...in
ne faites rien, tandis quefor ... of Object.keys()
lancerait une erreur.Object.keys(obj).forEach( key => {...})
?Une meilleure façon d'appliquer la réponse de @ Helzgate est peut-être de remplacer votre «for .. in» par
la source
if (this.formErrors.hasOwnProperty(field))
.la source
utilisez Object.keys:
la source
Si le comportement de for (... in ...) est acceptable / nécessaire pour vos besoins, vous pouvez dire à tslint de l'autoriser.
dans tslint.json, ajoutez ceci à la section "règles".
Sinon, @Maxxx a la bonne idée avec
la source
Je pense que ce message ne vise pas à éviter d'utiliser
switch
. Au lieu de cela, il veut que vous vérifiiezhasOwnProperty
. Le fond peut être lu ici: https://stackoverflow.com/a/16735184/1374488la source