リストを返す外部API
があります。私はその上の最後の行がListView
上でレンダリングされたコメントを解除する場合はNativescript:Angular2 Observableを使用中にリストビューが更新されない
ngOnInit() {
this._groceryService.load()
.subscribe(loadedGroceries => {
loadedGroceries.forEach((groceryObject) => {
console.dir(groceryObject);
this.groceryItems.unshift(groceryObject);
});
});
// It works if I uncomment this. It will just render one item, still nothing from API
// this.groceryItems.unshift(new Grocery('iuiu', 'jjjjj'));
}
:私は、コンポーネントに次のコードを持っているサービス
にload() {
let headers = new Headers();
headers.append("Authorization", Config.token);
return this._http.get(Config.apiUrl + "grocery/list", {headers: headers})
.map(res => res.json())
.map(data => {
let groceryList = [];
data.list.forEach((grocery) => {
groceryList.push(new Grocery(grocery._id, grocery.name));
});
return groceryList;
})
.catch(this.handleErrors);
}
を次のようしています。私ListView
は離れテンプレートと以下のように見えるさ:
<GridLayout>
<ListView [items]="groceryItems" class="small-spacing">
<template let-item="item">
<Label [text]="item.name" class="medium-spacing"></Label>
</template>
</ListView>
</GridLayout>
APIは、このようなものを返す:あなたはloadメソッドsetTimeout(() => {this.cd.markForCheck();}, 0);
を呼び出した後
{
"success": true,
"msg": "Lists found!",
"list": [
{
"_id": "574a324a18cadad00665a7f3",
"name": "Carrot",
"userid": "57482f309ae6c358703066ca",
"completed": 0,
"__v": 0
}
]
}
ちょっとDeepak、私は具体的には何がわからないここで間違っているのですが、私もこの種の問題にぶつかりました。非同期パイプと同様に、リストのRxJS Observableに切り替えることを検討することをお勧めします。それはちょうどAngularがこの種のものを実装するのを望んでいるようですが、私はそのアプローチでより良い運を得ました。 Groceriesレポの「角張った」ブランチには、サンプル実装があります。https://github.com/NativeScript/sample-Groceries/tree/angularをご覧ください。 –