Angular2 – errore se non si verifica se {{object.field}} esiste

Ho una domanda sul controllo se esiste qualche campo nell’object. Voglio stampare tutte le categorie che l’utente ha, quindi sto facendo qualcosa del genere:

    0" *ngFor="#category of user.categories">
  • {{category.name}}

La ragione? Tutti i dati sono stampati CORRETTAMENTE, ma sto ricevendo un errore nella console web come:

 Cannot read property 'name' of null 

Ma quando faccio qualcosa come:

  
    0" *ngFor="#category of user.categories">
  • {{category.name}}

Quindi tutto va bene. Sto facendo qualcosa di sbagliato o forse devo controllarlo ogni volta? Hai mai avuto un problema come questo? Grazie in anticipo.

uso di base

Utilizzare l’operatore di navigazione sicura

 {{category?.name}} 

quindi il name viene letto solo quando la category non è null .

schieramento

Questo funziona solo per il . (dereferenziazione) operatore. Per un array che puoi usare

 {{records && records[0]}} 

Vedere anche Angolare 2 – Imansible leggere la proprietà ‘0’ di errore non definito con contesto ERRORE CONTESTO: [object object]

tubo asincrono

Con il tubo async può essere usato come

 {{(chapters | async)?.length 

ngModel

Attualmente con ngModel deve essere diviso in

 [ngModel]="details?.firstname" (ngModelChange)="details.firstname = $event" 

Vedi anche Dati non si aggiunge al modello in angular2

*ngIf

Un’alternativa è sempre quella di racchiudere la parte della vista con *ngIf="data" per impedire che la parte venga sottoposta a rendering prima che i data siano disponibili per prevenire l’errore di dereferenziazione.