2017-08-31 9 views
0

私は、投稿のリストを表示するために使用されるanglefire2リストを持っています。各投稿には、それをお気に入りとしてマークするユーザのIDを含む子ノード(お気に入り)が含まれています。anglefire2リストから子ノードの値にアクセスする方法は?

私ができることを望むのは、お気に入りを現在のユーザーIDと比較してお気に入りに追加ボタンが表示されているかどうかを判断することです。

私の質問は、現在のユーザーが含まれているかどうかを確認するために、子ノードのお気に入りから値にアクセスするにはどうすればいいですか?たとえば、* ngIfを使用してボタンを非表示にできますか?

テンプレート例:

<ion-card *ngFor="let item of posts | async"> 
    <img src="{{ item.img }}" /> 
    <ion-card-content> 
     <button ion-button (click)="postsProvider.addFavourite(item.$key)">add to favourites</button> 
     <p> 
      {{ item.reason }} 
     </p> 
    </ion-card-content> 
</ion-card> 

構造例:

"reasons" : { 
    "-KsjNGF9MOj9PYVtcP0F" : { 
     "favourites" : { 
     "wYWVy8eR85btVhLw7ra9eLSce632" : true, 
     "l6ivMgzNE9ZUmHQRwySoaMgiW0J3" : true 
     }, 
     "img" : "https://firebasestorage.googleapis.com", 
     "reason" : "asadafaf", 
     "userId" : "wYWVy8eR85btVhLw7ra9eLSce632" 
    }, 
    "-KsjWsxJT14IZT-u-mSZ" : { 
     "dateCreated" : "Tue Aug 29 2017 18:38:02 GMT+0000 (GMT)", 
     "favourites" : { 
     "l6ivMgzNE9ZUmHQRwySoaMgiW0J3" : true 
     }, 
     "img" : "https://firebasestorage.googleapis.com/v0/b/", 
     "reason" : "asdasdasda", 
     "userId" : "wYWVy8eR85btVhLw7ra9eLSce632" 
    }, 
    } 

私は、ユーザーのお気に入りを表示するには、アプリケーションの他の部分、すなわちページに取り組んできたと私は非常に奇妙に思える何かを発見私に。

<ion-content> 
    <ion-card *ngFor="let item of posts | async" (click)="itemTapped($event, item)"> 
     <div class="card-img" [style.backgroundImage]="'url(' + item.img + ')'"></div> 

     <div class="remove-favourite" (click)="postsProvider.removeFavourite(item.$key)"> 
      <ion-icon name="close"></ion-icon> 
     </div> 
     <ion-card-content> 
      <ion-card-title> 
       {{ item.reason }} 

      </ion-card-title> 
      <p> 
       {{ item.favourites[userId].note }} 
      </p> 
     </ion-card-content> 
    </ion-card> 
</ion-content> 

私は{{アイテムを使用することができています。このメソッドを使用する:

お気に入りページには、私は、このような情報を表示ふぁぼ項目

getUserFavourites() { 
    let user = firebase.auth().currentUser.uid; 
    return this.db.list('/reasons/', { 
     query: { 
      orderByChild: 'favourites/' + user + '/favourited', 
      equalTo: true 
     } 
    }); 
    } 

を取得するには、以下の機能を使用しています。お気に入り[userId] .note}}を返し、値が返されます。しかし、わずかに異なるクエリ(以下)とは別にほぼ同じ設定で、同じことが機能しません。

getPosts(limit) { 
    return this.db.list('/reasons', { 
     query: { 
      limitToFirst: limit 
     } 
    }); 
} 

私は何かを明らかに欠けているような気がしますが、離れて、彼らはわずかに異なるクエリーを使用した結果との違いがあるだろう、なぜ私は表示されません。

答えて

0

私はこの問題の原因を見つけました。

* ngIf = "post.favourites [userId] .favourited!== true"を使用した場合、または値を表示しようとしたときに投稿にお気に入りがない場合、エラーが表示されます。

この問題を解決するために、私はpost.favouritesがまたはステートメント

*ngIf="!post.favourites || post.favourites[userId].favourited !== true" 
を追加することによって設定されたことを確認するためのチェックを追加しました
関連する問題