Saya menghadapi masalah yang aneh.

<select [(ngModel)]="selectedBudget.year" name="" class="form-control" id="">
                  <option value="2020">2020</option>
                  <option value="2021">2021</option>
                </select>

Dan inilah fungsi saya untuk mencari nilai berdasarkan tahun yang dipilih.

  addBudget(){
    alert(this.selectedBudget.year);//shows 2021
    alert(this.locations.find(p=>p.year=== 2021).locationName); here it shows the location name
    alert(this.locations.find(p=>p.year=== this.selectedBudget.year).locationName); //here it trigger error
/*     let rc = this.locations.find(x => x.locationName === this.selectedBudget.locationName && 
      x.year === this.selectedBudget.year).cost; //resource cost
      alert(rc); */
      console.info(this.locations);

  }

Seperti yang saya sebutkan di komentar internal setelah setiap peringatan, ini memicu kesalahan Cannot read property locationName of undefined. Tapi yang aneh adalah garisnya bekerja tepat di atas itu.

Jadi 2021 ketika saya menentukan sebagai nilai secara langsung, ia kembali tetapi ketika memeriksa properti itu tidak berfungsi.

Apakah ada yang salah dengan cara saya menentukan ngModel. Milik saya adalah dropdown yang sudah diisi sebelumnya.

0
Sandeep Thomas 17 April 2020, 16:11

1 menjawab

Jawaban Terbaik

Anda menyetel nilai string dengan melakukan value="2021". Ini berarti perbandingan kesetaraan ketat p.year === 2021 gagal karena jenisnya berbeda.

Sebagai gantinya, ikat nilai numerik ke opsi menggunakan [ngValue]. Ini berarti bahwa nilai yang dipilih sekarang numerik, dan pemeriksaan kesetaraan ketat Anda akan lulus.

<select [(ngModel)]="selectedBudget.year" class="form-control">
  <option [ngValue]="2020">2020</option>
  <option [ngValue]="2021">2021</option>
</select>
1
Kurt Hamilton 17 April 2020, 13:17