Фильтрация ионных карт по сохраненным настройкам Firebase - PullRequest
0 голосов
/ 21 января 2019

У меня есть база данных firestore с 2 различными коллекциями объектов, Users & Property. Я хочу иметь возможность показывать пользователю соответствующие карты свойств в фиде свойств на основе их сохраненных предпочтений (т. Е. Если их предпочтения «Город» сохранены как «Дублин», им отображаются только свойства, расположенные в Дублине).

Мой компонент фида свойств в настоящее время выглядит следующим образом: `

export class PropertyFeedComponent implements OnInit {

  Propertys;
  filtered;

  Property: Observable<any[]>;


  filter = new BehaviorSubject(null);

  constructor(
    public db: DbService,
    public modal: ModalController,
    public auth: AuthService
  ) {}

  ngOnInit() {
    this.Propertys = this.auth.user$.pipe(
      switchMap(user =>
        this.db.collection$('Propertys', ref =>
          ref
            .orderBy('createdAt', 'desc')
            .limit(100)
        )
      ),
      shareReplay(1)
    );

   // this.filtered = this.filter.pipe(
    //  switchMap(status => {
    //    return this.Propertys.pipe(

    //    );
    //  })
   // );
  }
}

` Я прокомментировал отфильтрованную функцию, так как не уверен, что это лучший способ сделать это. Я называю свойство из базы данных в моем HTML следующим образом:

   <ng-container *ngIf="(auth.user | async) || {} as user">


  <ion-card *ngFor="let Property of Propertys | async; trackBy: trackById">

Как мне выполнить запрос каждого отдельного объекта, чтобы проверить, соответствует ли он предпочтениям, сохраненным пользователями.

1 Ответ

0 голосов
/ 22 января 2019
this.Propertys = this.auth.user$.pipe(
  switchMap(user =>
    this.db.collection$('Propertys', ref =>
      ref
        .where('location','==',user.prefferedlocation)
        .orderBy('createdAt', 'desc')
        .limit(100)
    )
  ),
  shareReplay(1)
);

Где location - это поле в коллекции Property . И User.prefferedlocation - это место, где вы храните предпочтения пользователя в своей базе данных Firestore.

Вы можете получать предпочтение каждый раз, когда вызывается функция, или сохранять предпочтение, сохраненное в локальной переменной браузера, чтобы избежать ненужных чтений в вашей базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...