それが動作するはずのようにこれは私には見えますが、私は、テンプレートのエラーを取得:Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
ngForとAsyncPipeについて何が欠けていますか?
テンプレート:
<div class="block-header">
<h2>{{ policyName }}</h2>
</div>
<div *ngFor="let p of policies | async" class="card event-card">
<div class="card-header">
<h2>{{ p.title }}</h2>
</div>
<div class="card-body card-padding">
<div [markdown]="p.description"></div>
</div>
</div>
コンポーネント:
export class PoliciesComponent implements OnInit {
name: string = 'policies';
//public policies: Policy[];
public policies: Observable<Policy>;
constructor(
private policyService: PolicyService,
private route: ActivatedRoute) { }
ngOnInit(): void {
// this.route.params is an observable of the child (category) routes under /policies
this.route.params.subscribe((p: Params) => this.loadPolicies(p['category']))
}
loadPolicies(category: string): void {
let policyCategory = PolicyCategory.ClubPolicy;
if (category === 'rules') {
policyCategory = PolicyCategory.LocalRule;
} else if (category === 'handicaps') {
policyCategory = PolicyCategory.Handicaps;
}
this.policies = this.policyService.loadPolicies(policyCategory);
// this.policies = [];
// this.policyService.loadPolicies(policyCategory).subscribe(p => this.policies.push(p))
}
}
サービス:
loadPolicies(category: PolicyCategory): Observable<Policy> {
return this.dataService.getApiRequest('policies')
.mergeAll() // turn Observable<any> where any=collection into Observable
.map((p: any) => new Policy().fromJson(p))
.filter((policy: Policy) => policy.category === category)
}
を
置き換えコード(th eコンポーネント)では、すべて動作しますが、サブスクリプションの登録を解除する必要があります。私はこのようにしているように感じますが、私のブラウザは同意しません。
Observableで非同期がどのように機能するのか私が誤解していることは何ですか?
を使用すると、フィルターなしでそれを試してみてくださいことはできますか? – echonax
mergeAll()操作を削除してみます。 – Avi
mergeAll()はここで間違いです。 Observableを返す必要があり、非同期フィルタが機能します。しかし、私はまた、以下の答えに投稿したものに近づくようにサービスを改作するつもりです。 –
Stuart