получить идентификатор документа коллекции из Firestore, используя Angularfire2 в ionic 3 [дубликат]

avatar
Mumin Gazi
6 ноября 2018 в 09:23
3025
2
1

Я пытаюсь получить идентификатор коллекции, чтобы использовать ее на ионной странице:

это мой интерфейс:

  export interface Item { 
  categoryOfPost: string; 
  imageUrl: string;
  nameOfPost: string;
  cityOfPost: string;
  createdDate: string;
  currencyOfPost: string;
  priceOfPost: number;
  typeOfPost: number;
  statusOfPost: string;
  id?: string;
}

 private itemsCollection: AngularFirestoreCollection<Item>;
  items: Observable<Item[]>;

и это содержимое функции getPosts

  this.itemsCollection = this.afs.collection('posts', ref => ref.orderBy('createdDate', 'desc'));
  this.items = this.itemsCollection.valueChanges(); 

когда я хочу просмотреть контент, который я использую:

 <ion-card style="margin-bottom: 25px; background-color: burlywood" *ngFor="let item of items | async">
    <ion-item text-wrap  style="margin-bottom: 25px; background-color: burlywood"> 
        <ion-list >       
          <ion-item> 
            <img src="{{ item.imageUrl }}">            
            cityOfPost: {{ item.id }}            
          <button ion-button (click)="detailpage(item.id)">click to test  </button>
          </ion-item>           
        </ion-list>  
    </ion-item>
  </ion-card>  

Я могу показать в HTML все, КРОМЕ ID, он НЕ ОПРЕДЕЛЕН ???? как правильно его отобразить???

Спасибо.

Источник
Jacky Tang
3 мая 2019 в 20:11
0

Создал функцию для этой основной проблемы. Он находится внизу этой страницы. Не уверен, почему это просто не является частью AngularFire2...

Ответы (2)

avatar
Renaud Tarnec
6 ноября 2018 в 10:07
2

Это связано с тем, что при использовании valueChanges() "все метаданные снимка удаляются, и только метод предоставляет только данные", как описано в документе.<16778887571515>

Вы должны использовать snapshotChanges(), см. документ здесь, в котором говорится: "Зачем вам это использовать? - Когда вам нужен список данных, но вы также хотите сохранить метаданные."

avatar
Mumin Gazi
6 ноября 2018 в 11:08
1

я изменил код на:

  this.itemsCollection = this.afs.collection('posts', ref => ref.orderBy('createdDate', 'desc'));
  this.items = this.itemsCollection.snapshotChanges().pipe(
    map(actions => actions.map(a => {
      const data = a.payload.doc.data() as Item;
      const id = a.payload.doc.id;
      return { id, ...data };
    }))
  );

и это работало отлично.