首页 > 解决方案 > Angular - 错误类型错误:无法读取未定义的属性“标题”

问题描述

我将 Laravel 端点调用到 Angular 7 中。我有两个表 smsmo 和包。smsmo 将 package_id 作为来自 package(id) 的外键。我想显示标题而不是 package_id。我在控制台中收到此错误。

错误

有角度的

smsmot.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() {}
}

包.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['title']}}

我想在 smsmo (id, package_id) 中显示 package(id, title) 中的标题而不是 package_id 我该怎么办。

除此之外,其他一切都运行良好。

标签: angularlaravel

解决方案


似乎包未定义为什么您会收到此错误

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

或者您可以使用带有 ngIf 指令的 ng-container 来检查包对象

<ng-container *ngIf="smsmo?.package; else default ">
    <td>{{smsmo?.package.title}}</td>
</ng-container>
<ng-template #default>
    <td> Not available </td>
</ng-template>

推荐阅读