Kes*_*vid 4 httprequest graphql ngfor angular
我正在编写我的第一个 Angular2 应用程序。
我有一个BankAccountService
从后端服务器获取数据的服务,以及一个bank-account.component
使用此服务来简单显示未排序的 accountNumbers 列表的服务。
通过 chrome devtool 进行调试,我能够看到数据已正确获取并存储在bankAccounts
数据成员中,但由于某种原因,ul
没有显示任何内容。
银行账户服务:
import { Injectable } from '@angular/core';
import {client} from '../app.module';
import gql from 'graphql-tag';
import {ObservableQuery} from "apollo-client";
@Injectable()
export class BankAccountService{
bankAccounts: any[] = [];
constructor() {
this.queryBankAccounts();
}
queryBankAccounts(): any{
let queryObservable: ObservableQuery = client.watchQuery({
query: gql`
{
bankAccounts {
id
accountNumber
userOwners{
firstName
}
bankId
branchId
transactions{
amount
payerId
recipientId
}
}
}
`,
pollInterval: 50
});
let subscription = queryObservable.subscribe({
next: ({ data }) => {
this.bankAccounts = data;
},
error: (error) => {
console.log('there was an error sending the query', error);
}
});
}
getBankAccounts(){
return this.bankAccounts;
}
}
Run Code Online (Sandbox Code Playgroud)
银行帐户.组件:
import {Component} from "@angular/core";
import {BankAccountService} from "../services/BankAccountService";
@Component({
selector: 'bank-account',
template: `<ul>
<li *ngFor="let account of bankAccounts">
{{account.accountNumber}}
</li>
</ul>`,
providers: [BankAccountService]
})
export class BankAccountComponent{
bankAccounts: any[] = [];
constructor(bankAccountService: BankAccountService){
this.bankAccounts = bankAccountService.getBankAccounts();
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人能阐明一些观点,我将非常感激,我似乎无法理解我的错误。
提前致谢
这是因为异步函数正在获取数据,但您试图在获取数据之前显示它,因此,您正在迭代一个空数组。您可以通过不初始化数组(更改bankAccounts: any[] = [];
为bankAccounts: any[];
)并用 包围<ul>
标签来轻松解决此问题<div *ngIf="bankAccounts"></div>
。这样,bankAccounts
在获取数据之前,数组将是未定义的,并且*ngFor
由于指令的原因,您的循环将在填充数组后立即执行*ngIf
。