ソーシャルメディアアプリの場合、AngularFire 2
を使用してIDで参照されるフィードオブジェクトのコレクションがあります。これらのIDのそれぞれに関連するデータが実際のフィードオブジェクトを格納するデータベースから取得されると、feedCards
Observableオブジェクトをこの情報で更新して、HTMLにフィードオブジェクトのコレクションを非同期で表示できます。それは非常に混乱しやすいイベントチェーンなので、まとめてみましょう。Ionic 3 - 非同期データで観測可能な更新
ステップバイステップのアプローチ
displayFeed()
右NavController
負荷Main
ページのfeed
成分の前に呼び出されます。displayFeed()
は、実質的にユーザープロファイル項目であるtwiner
項目を取得し、userProfile
変数にユーザープロファイルを格納します。- ユーザープロファイルがロードされると、グローバル
feedCards
オブザーバブルはloadFeed()
に設定され、オブザーバブルアレイが返されます。 loadFeed()
は、userProfile
グローバルオブジェクトのid
の値を使用して、ユーザープロファイルに格納されているフィード参照のリストを読み込みます。- このスナップショットはサブスクライブされ、ローカルの
feed
変数はフィード参照の結果リストと等しく設定されます。 loadFeed
は、feed
参照リストが各フィード参照に含まれるデータによってマップされるObservableオブジェクトを返します。pullFeedData(number)
は、フィードオブジェクトへの参照を取り込み、関連付けられたフィードデータでオブザーバブルを返します。alert(JSON.stringify(feedData));
アラート正しいfeed
オブジェクト他の基本的にすべてをどのような作品
。
何
feed.map(...
動作しないことpullFeedData(number)
引っ張るので、フィードアレイを更新し、非同期feedData
を返していません。従って、alert(JSON.stringify(data));
のdisplayFeed()
アラート[null]
。コード
feed.ts
userProfile:any; feed: FirebaseListObservable<any>; feedData: FirebaseObjectObservable<any>; feedCards: Observable<any[]>; constructor(public db: AngularFireDatabase, public nativeStorage: NativeStorage) {} displayFeed():void { this.nativeStorage.getItem('twiner').then((res) => { this.userProfile = res; this.feedCards = this.loadFeed(); this.feedCards.subscribe((data)=>{ alert(JSON.stringify(data)); }) }); } loadFeed():Observable<any[]> { var feed; this.feed = this.db.list('/twiners/' + this.userProfile.id + '/feed', { preserveSnapshot: true }); this.feed.subscribe((snapshots)=>{feed = snapshots}); return Observable.of(feed.map((snapshot) => { this.pullFeedData(snapshot.val()).subscribe((feedData)=>{ alert(JSON.stringify(feedData)); return feedData; }); })).delay(1000); } pullFeedData(twine:number):any { return this.db.object('/twines/' + twine, { preserveSnapshot: true }); }
feed.html
<ion-content fullscreen scroll="true" overflow-scroll="true"> <ion-card *ngIf="feedCards | async">feedCards exist</ion-card> <twine-feed-card *ngFor="let feedCard of feedCards | async" [data]="feedCard" ></twine-feed-card> </ion-content>
概要
feed.map
feed
は、新しいデータが非同期にプルされるため、フィードオブジェクトを更新しません。私はこれのための修正が必要です。ありがとうございました!
にあなたはゾーン内でそれを実行してみましたか..? (私はlistobservablesを使用していましたが、今はイベントエミッタを使用してこのリアルタイム機能を実現しています) –
@RajaYoganゾーン内でこの機能を使用する方法を再確認してもよろしいですか?要するに、私はそれが何であるか分からない。 –
probsはありません..アラートでここにデータを取得しますか? this.feedCards.subscribe((data)=> { アラート(JSON.stringify(data)); } –