#angular
Вопрос:
В моем Aangular-12 у меня есть этот код:
Ответ API Json:
{
"message": "States successfully Retrieved.",
"error": false,
"code": 200,
"results": {
"states": [
{
"id": 1,
"country_id": 1,
"name": "Cairo",
"country": {
"id": 1,
"capital": "",
"nationality": "Egyptian",
"name": "Egypt",
}
}
]
}
}
Интерфейс:
export interface ICstate {
id?: number;
name: string;
country_id: number;
country?: [];
}
компонент:
государствооригин!: ICstate;
viewStateModal(row: any) {
this.stateorigin = row;
}
HTML:
<a class="btn btn-primary btn-sm" (click)="viewStateModal(row)" data-toggle="modal" data-target="#viewStateModal">
View
</a>
<div class="modal fade" id="viewStateModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel"> State of Origin Details</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">amp;times;</span>
</button>
</div>
<div class="modal-body" *ngIf="stateorigin != undefined">
<div class="col-md-12">
<div class="row">
<div class="col-md-6">
State of Origin: <strong>{{ stateorigin.name || 'N/A' }}</strong>
</div>
<div class="col-md-6">
Country: <strong>{{ stateorigin.country.name || 'N/A' }}</strong>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" (click)="hide()">Close</button>
</div>
</div>
</div>
console.log(это.stateorigin);
дает:
Object
country: {id: 1, nationality: "Egyptian", name: "Egypt",}
country_id: 1
id: 1
name: "Cairo"
Когда я попытался просмотреть подробные сведения о состоянии, я получил эту ошибку:
error TS2532: Object is possibly 'undefined'.
100 Country: <strong>{{ stateorigin.country.name || 'N/A' }}</strong>
имя выделено в stateorigin.country.name
В стране есть много государственных образований
Как мне решить эту проблему?
Спасибо
Комментарии:
1. измените
country?: [];
на что-то вродеcountry?:{id:number,name:string,capitol:string, nationality:string}
2. @depperm — Когда я изменил его в интерфейсе, как вы советовали, это все еще не решило проблему. Ошибка все еще остается
3. ах, это необязательный ключ:значение, поэтому измените его на
country: {...}
или с?
помощью логики добавления в html, напримерstateorigin.country?.name || 'N/A'
(я думаю, это работает)4. @depperm — Это работает. Большое спасибо
Ответ №1:
Похоже, есть две проблемы. Первая страна определена как массив, но используется как объект. Обновите тип:
country?: {id:number, name:string, capital?:string, nationality:string}
Затем в html, поскольку страна необязательна (и может не существовать), вам нужно проверить, прежде чем ссылаться (оператор безопасной навигации).
stateorigin.country?.name || 'N/A'