Komunikat o błędzie:
src / app / detail / edit / edit.component.ts [111, 5]: instrukcje (... w ...) muszą być filtrowane za pomocą instrukcji if
Fragment kodu (jest to działający kod. Jest również dostępny w sekcji sprawdzania poprawności formularza 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] + ' ';
}
}
}
Masz pomysł, jak naprawić ten błąd włókna?
angular
angular2-forms
angular-cli
tslint
choopage - Jek Bao
źródło
źródło
Odpowiedzi:
Aby wyjaśnić rzeczywisty problem, na który wskazuje tslint, cytat z dokumentacji JavaScript instrukcji for ... in :
Zasadniczo oznacza to, że otrzymasz właściwości, których możesz się nie spodziewać (z łańcucha prototypów obiektu).
Aby rozwiązać ten problem, musimy iterować tylko nad własnymi właściwościami obiektów. Możemy to zrobić na dwa różne sposoby (zgodnie z sugestiami @Maxxx i @Qwertiy).
Pierwsze rozwiązanie
W tym przypadku wykorzystujemy metodę Object.Keys () , która zwraca tablicę własnych wyliczalnych właściwości danego obiektu, w tej samej kolejności, jaką zapewnia pętla for ... in (różnica polega na tym, że pętla for in wylicza właściwości w łańcuch prototypów).
Drugie rozwiązanie
W tym rozwiązaniu iterujemy wszystkie właściwości obiektu, w tym właściwości jego łańcucha prototypowego, ale używamy metody Object.prototype.hasOwnProperty () , która zwraca wartość logiczną wskazującą, czy obiekt ma określoną właściwość jako własność (nie odziedziczoną), do filtrowania odziedziczone właściwości.
źródło
Object.keys
jest to ES5. Jedyną rzeczą z ES6 jest pętla for-of. Możemy iterować tablicę w zwykłej pętli od 0 do jej długości i będzie to ES5.this.formErrors
jest zerowy,for...in
po prostu nic nie rób, a tofor ... of Object.keys()
spowoduje błąd.Object.keys(obj).forEach( key => {...})
?Lepszym sposobem zastosowania odpowiedzi @ Helzgate jest zastąpienie słowa „za .. za”
źródło
if (this.formErrors.hasOwnProperty(field))
.źródło
użyj Object.keys:
źródło
Jeśli zachowanie for (... in ...) jest dopuszczalne / konieczne dla twoich celów, możesz powiedzieć tslint, aby zezwolił na to.
w tslint.json dodaj to do sekcji „reguły”.
W przeciwnym razie @Maxxx ma dobry pomysł
źródło
Myślę, że w tym komunikacie nie chodzi o unikanie używania
switch
. Zamiast tego chce, abyś sprawdziłhasOwnProperty
. Tło można przeczytać tutaj: https://stackoverflow.com/a/16735184/1374488źródło