Flusenfehlermeldung:
src / app / detail / edit / edit.component.ts [111, 5]: for (... in ...) Anweisungen müssen mit einer if-Anweisung gefiltert werden
Code-Snippet (Es handelt sich um einen Arbeitscode . Er ist auch im Abschnitt zur Überprüfung des Formulars angle.io verfügbar. ):
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] + ' ';
}
}
}
Irgendeine Idee, wie man diesen Flusenfehler behebt?
angular
angular2-forms
angular-cli
tslint
choopage - Jek Bao
quelle
quelle
Antworten:
Um das eigentliche Problem zu erklären, auf das tslint hinweist, ein Zitat aus der JavaScript-Dokumentation der for ... in-Anweisung :
Im Grunde bedeutet dies, dass Sie Eigenschaften erhalten, die Sie möglicherweise nicht erwarten (aus der Prototypenkette des Objekts).
Um dies zu lösen, müssen wir nur über die eigenen Eigenschaften des Objekts iterieren. Wir können dies auf zwei verschiedene Arten tun (wie von @Maxxx und @Qwertiy vorgeschlagen).
Erste Lösung
Hier verwenden wir die Object.Keys () -Methode, die ein Array der eigenen aufzählbaren Eigenschaften eines bestimmten Objekts in derselben Reihenfolge zurückgibt, wie sie von einer for ... in-Schleife bereitgestellt wird (der Unterschied besteht darin, dass eine for-in-Schleife Eigenschaften in auflistet auch die Prototypenkette).
Zweite Lösung
In dieser Lösung iterieren wir alle Eigenschaften des Objekts, einschließlich derjenigen in seiner Prototypkette, verwenden jedoch die Methode Object.prototype.hasOwnProperty () , die einen Booleschen Wert zurückgibt, der angibt, ob das Objekt die angegebene Eigenschaft als eigene (nicht geerbte) Eigenschaft hat, um zu filtern die geerbten Eigenschaften aus.
quelle
Object.keys
ES5 ist. Das einzige, was es von ES6 gibt, ist eine For-of-Schleife. Wir können das Array in der üblichen Schleife von 0 bis zu seiner Länge iterieren und es wäre ES5.this.formErrors
null ist,for...in
tun Sie einfach nichts, währendfor ... of Object.keys()
Fehler werfen würde.Object.keys(obj).forEach( key => {...})
?Eine bessere Möglichkeit, die Antwort von @ Helzgate anzuwenden, besteht möglicherweise darin, Ihr 'for .. in' durch zu ersetzen
quelle
if (this.formErrors.hasOwnProperty(field))
.quelle
benutze Object.keys:
quelle
Wenn das Verhalten von for (... in ...) für Ihre Zwecke akzeptabel / notwendig ist, können Sie tslint anweisen, es zuzulassen.
Fügen Sie dies in tslint.json dem Abschnitt "Regeln" hinzu.
Ansonsten hat @Maxxx die richtige Idee mit
quelle
Ich denke, in dieser Nachricht geht es nicht darum, die Verwendung zu vermeiden
switch
. Stattdessen möchten Sie, dass Sie nach suchenhasOwnProperty
. Der Hintergrund kann hier gelesen werden: https://stackoverflow.com/a/16735184/1374488quelle