Angular - ОШИБКА TypeError: Невозможно прочитать свойство 'title' из неопределенного - PullRequest
2 голосов
/ 21 июня 2019

Я вызываю конечные точки Laravel в Angular 7. У меня есть две таблицы smsmo и package. У smsmo есть package_id как внешний ключ от пакета (id). Я хочу отображать заголовок вместо package_id. Я получил эту ошибку в моей консоли.

error

угловая

smsmo.ts

import { User } from '../models/user';
import { Telco } from '../models/telco';
import { Package } from '../models/package';

export class Smsmo {
    id: number;
    msisdn: string;
    message: string;
    short_code_called: string;
    packaged_id: string;
    error_message: string;
    error_code: string;
    telco: string;
    user_id: number;

    user?: User;
    telcoId?: Telco;
    package?: Package;

    constructor() {}
}

package.ts

import { User } from '../models/user';
import { Services } from '../models/services';

export class Package {
    id: number;
    title: string;
    descriptions: String;
    price: string;
    days: number;
    service_id: number;
    key_word: string;
    welcome_message: string;
    amount: string;
    user?: User;

    service?: Services;
    constructor() {}
}

smsinbox.component.ts (smsmo)

export class SmsInboxComponent implements OnInit {

    smsmos: Smsmo[];
    isLoading: Boolean = false;
    public searchText: string; 
    public filter: string;  

    constructor(private smsmoService: SmsmoService) { }

    ngOnInit() {

        // Get Bulk SMS Inbox detail
        this.getSmsmos();    

        window.dispatchEvent(new Event('resize'));

        document.body.className = 'skin-blue sidebar-mini';
    }

    ngOnDestroy(): void {
        document.body.className = '';
    }

     getSmsmos(): void {
         this.isLoading = true;
         this.smsmoService.getSmsmos()
            .subscribe(
                response => this.handleResponse(response),
                error => this.handleError(error));
            }
}

smsinbox.component.html

<tr  *ngFor="let smsmo of smsmos; let i = index">
    <td>{{i + 1}}</td>
    <td>{{smsmo.msisdn}}</td>
    <td>{{smsmo.short_code_called}}</td>
    <td>{{smsmo?.package['title']}}</td>
    <td>{{smsmo.error_message}}</td>
    <td>{{smsmo.error_code}}</td>

</tr>

Проблема в

{{smsmo? .Package [ 'название']}}

Я хочу отображать заголовок из пакета (id, title) вместо package_id в smsmo (id, package_id) Что мне делать.

Все остальные вещи отлично работают, кроме этого.

1 Ответ

1 голос
/ 21 июня 2019

кажется, пакет не определен, поэтому вы получили эту ошибку

 <td>{{smsmo?.package?.title || 'Not available' }}</td>

или вы можете использовать ng-container с директивой ngIf для проверки объекта пакета

<ng-container *ngIf="smsmo?.package; else default ">
    <td>{{smsmo?.package.title}}</td>
</ng-container>
<ng-template #default>
    <td> Not available </td>
</ng-template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...