Есть ли способ вернуть записи Firebase из фильтра при вводе совпадающих букв - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть экран поиска, который ищет в коллекции пользователей Firebase подходящие displayNames. Но я хотел бы вернуть список, основанный на первых буквах по мере их ввода.

Например, у вас есть Джон, Джонни, Джек.

При наборе J появляются все три. Когда вы набираете 'Jo', появляются только первые два.

Вот мой код, который работает, но работает только при наборе всего DisplayName

  search(event) {
    console.log('event', event.target.value);
    let searchKey: string = event.target.value;
    console.log('searchKey', searchKey);
    let firstLetter = searchKey;
    console.log('firstLetter', firstLetter);

    if (searchKey.length === 0) {
      this.sampleArr = [];
      this.resultArr = [];
    }

    if (this.sampleArr.length === 0) {
      this.afs.collection('users', ref => ref.where('displayName', '==', firstLetter))
        .snapshotChanges().subscribe(data => {
          data.forEach(childData => {
            this.sampleArr.push(childData.payload.doc.data());
          });
        });
    }
  }
<ion-content padding>
  <ion-searchbar (ionInput)="search($event)"></ion-searchbar>

  <ion-item *ngFor="let user of sampleArr" (click)="sendUserRequest(user)">
    <ion-avatar style="padding-right: 10px;">
      <img [src]="user.profilePic" alt="" srcset="">
    </ion-avatar>
    <ion-label>
      <ion-note style="font-weight:bold; color: black;">
        Send request to
      </ion-note>  
      <ion-note style="font-weight:bold; color: black;">
        {{user?.displayName}}
      </ion-note>  
    </ion-label>
  </ion-item>
</ion-content>

1 Ответ

1 голос
/ 06 апреля 2020

Вы можете выполнить sh, используя операторы > и <=:

ref.where('displayName', '>=', 'J')
   .where('displayName', '<', 'K')

Этот запрос дает вам все, начиная с J.

A Общий способ написания этого запроса:

ref.where('displayName', '>=', 'J')
   .where('displayName', '<=', 'J\uF7FF')

\uF7FF во втором запросе - это только последний известный символ Unicode, поэтому все, что начинается с J, гарантированно будет до этого. Этот способ кодирования проще, потому что вам не нужно определять следующую букву.

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