Pesan kesalahan serat:
src / app / detail / edit / edit.component.ts [111, 5]: untuk (... dalam ...) pernyataan harus disaring dengan pernyataan if
Cuplikan kode (Ini adalah kode yang berfungsi. Ini juga tersedia di bagian validasi formulir 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] + ' ';
}
}
}
Adakah cara untuk memperbaiki kesalahan serat ini?
angular
angular2-forms
angular-cli
tslint
choopage - Jek Bao
sumber
sumber
Jawaban:
Untuk menjelaskan masalah aktual yang ditunjukkan tslint, kutipan dari dokumentasi JavaScript untuk ... dalam pernyataan :
Jadi, pada dasarnya ini berarti Anda akan mendapatkan properti yang mungkin tidak Anda harapkan (dari rantai prototipe objek).
Untuk mengatasi ini, kita perlu beralih hanya pada properti yang dimiliki objek. Kita dapat melakukan ini dengan dua cara berbeda (seperti yang disarankan oleh @Maxxx dan @Qwertiy).
Solusi pertama
Di sini kita menggunakan metode Object.Keys () yang mengembalikan array dari properti enumerable milik objek tertentu, dalam urutan yang sama seperti yang disediakan oleh for ... in loop (perbedaannya adalah for-in loop menyebutkan properti di rantai prototipe juga).
Solusi kedua
Dalam solusi ini kami mengulangi semua properti objek termasuk yang ada di rantai prototipe tetapi menggunakan metode Object.prototype.hasOwnProperty () , yang mengembalikan boolean yang menunjukkan apakah objek memiliki properti yang ditentukan sebagai properti yang dimiliki (tidak diwariskan), untuk memfilter properti warisan keluar.
sumber
Object.keys
ES5. Satu-satunya hal dari ES6 ada for-of loop. Kita dapat mengulangi array dalam loop biasa dari 0 hingga panjangnya dan itu akan menjadi ES5.this.formErrors
adalah nol,for...in
lakukan saja, sementarafor ... of Object.keys()
akan membuang kesalahan.Object.keys(obj).forEach( key => {...})
?Cara yang lebih rapi dalam menerapkan balasan @ Helzgate adalah dengan mengganti 'untuk .. masuk' dengan
sumber
if (this.formErrors.hasOwnProperty(field))
.sumber
gunakan Object.keys:
sumber
Jika perilaku for (... in ...) dapat diterima / diperlukan untuk tujuan Anda, Anda dapat memberi tahu tslint untuk mengizinkannya.
di tslint.json, tambahkan ini ke bagian "aturan".
Jika tidak, @Maxxx memiliki ide yang tepat
sumber
Saya pikir pesan ini bukan tentang menghindari penggunaan
switch
. Sebaliknya ia ingin Anda memeriksanyahasOwnProperty
. Latar belakang dapat dibaca di sini: https://stackoverflow.com/a/16735184/1374488sumber