gpt4 book ai didi

html - Angular 如何在 html 中显示数组中的单个对象

转载 作者:行者123 更新时间:2023-12-02 20:11:26 26 4
gpt4 key购买 nike

我正在尝试根据属性值显示数组中的单个对象。

我的交易项目列表有一个 accountId 属性,但我想显示帐户名称。所有帐户都加载到accounts$ 数组中。我只是不知道如何正确使用我的 getAccountById 函数

这是组件类

export class NewtransactionComponent implements OnInit {
transaction$: Transaction;
tempItem$: TransactionItem;
accounts$: Array<Account>;

constructor(private data: DataService) { }

ngOnInit() {
this.transaction$ = new Transaction();
this.data.getAccounts().subscribe(data => this.accounts$ = Object.assign(new Array<Account>(), data));
this.tempItem$ = new TransactionItem();
this.transaction$.TransactionDate = new Date();
}

addItem(){
this.transaction$.TransactionItems.push(this.tempItem$);
this.tempItem$ = new TransactionItem();
}

getAccountById(id):Account{
return this.accounts$.find(x => x.id === id);
};

这是给出错误“无法读取未定义的属性“名称””的 html View

     <div class="items-container">
<mat-form-field>
<input matInput placeholder="Amount" [(ngModel)]="tempItem$.Amount">
</mat-form-field>
<mat-form-field *ngIf="accounts$">
<mat-select placeholder="Account" [(ngModel)]="tempItem$.AccountId">
<mat-option *ngFor="let account of accounts$" [value]="account.id">{{account.name}}</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field>
<mat-select placeholder="Credit/Debit" [(ngModel)]="tempItem$.CreditDebit">
<mat-option value="Credit">Credit</mat-option>
<mat-option value="Debit">Debit</mat-option>
</mat-select>
</mat-form-field>
<button mat-mini-fab color="primary" (click)="addItem()">Add</button>
</div>
<table *ngIf="transaction$.TransactionItems.length">
<tr>
<th>Amount</th>
<th>Account</th>
<th>Credit/Debit</th>
</tr>
<tr *ngFor="let item of transaction$.TransactionItems">
<th>{{item.Amount | currency}}</th>
<th>{{getAccountById(item.AccoundId).name}}</th>
<th>{{item.CreditDebit}}</th>
</tr>
</table>

这些是账户和交易项目数据模型供引用

export class Account {
Id: string;
Name: string;
Category: string;
SubCategory: string;
}

export class TransactionItem{
Id: number;
TransactionId:number;
Accountid: string;
Amount: number;
CreditDebit: string;
}

最佳答案

我假设错误在这里:{{account.name}}

这很可能是一个时间问题。该页面将尝试在从订阅中检索数据之前显示。

解决该问题的一种方法是使用 *ngIf

 <div class="items-container" *ngIf="account">

这样,在检索数据之前页面不会尝试显示。

另一种选择是使用安全导航运算符:

{{account?.name}}

问号告诉 Angular 如果帐户为 null 或未定义,则不要尝试读取 name 属性。

编辑:

如果这里有错误:{{getAccountById(item.AccountId).name}},那么它告诉您 getAccountById(item.AccountId) 未定义或为空。有没有可能您的一笔交易没有账户?

更仔细地观察您的代码,JavaScript/TypeScript 区分大小写。因此,如果您使用以下方式声明 id:

Id: string;

(大写 I)

您将无法使用以下方式访问它:

return this.accounts$.find(x => x.id === id);

(小写)

关于html - Angular 如何在 html 中显示数组中的单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53544607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com