фильтровать данные пожарного магазина по имени - PullRequest
0 голосов
/ 19 марта 2019

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

error TS2339: Property 'subscribe' does not exist on type 'void'

Вот мой код:

export class HomeComponent implements OnInit {

ageValue: number = 0;
searchValue: string = "";
items: Array<any>;
name_filtered_items: Array<any>;
constructor(

  public firebaseService: FirebaseService,

  private router: Router

) { }

ngOnInit() {

this.getData();

}
getData(){

this.firebaseService.getUsers()

.subscribe(result => {

  this.items = result;

  this.age_filtered_items = result;

  this.name_filtered_items = result;

})

}

viewDetails(item){
 this.router.navigate(['/details/'+ item.payload.doc.id])
}
capitalizeFirstLetter(value){

return value.charAt(0).toUpperCase() + value.slice(1);

}
 searchByName(){

let value = this.searchValue.toLowerCase();

this.firebaseService.searchUsers(value)

.subscribe(result => {

  this.name_filtered_items = result;

  this.items = this.combineLists(result, this.age_filtered_items);

})

}

combineLists(a, b){

let result = [];



a.filter(x => {

  return b.filter(x2 =>{

    if(x2.payload.doc.id == x.payload.doc.id){

      result.push(x2);

    }

  });

});

return result;
}

}

FirebaseService.ts:

export class FirebaseService {

constructor( private ngZone: NgZone,) {}

getUsers(){

    return firebase.firestore().collection('users').snapshotChanges();

}



searchUsers(searchValue){

    return firebase.firestore().collection('users',ref => ref.where('nameToSearch', '>=', searchValue)

        .where('nameToSearch', '<=', searchValue + '\uf8ff'))

      .snapshotChanges()

     }
}

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

nativescript-plugin-firebase не поддерживает snapshotChanges(), необходимо использовать метод onSnapshot с обратным вызовом.

firebase.firestore().collection('users').onSnapshot((snapshot: firestore.QuerySnapshot) => {
  snapshot.forEach(city => console.log(city.data()));
});
0 голосов
/ 19 марта 2019

Вот мое решение с angularfire2

import { AngularFireDatabase} from 'angularfire2/database';
import { map } from 'rxjs/operators';

constructor(private database: AngularFireDatabase) {}

searchUser(firstName: string) {
    this.database.list('/profiles', ref => ref.orderByChild('firstName').equalTo(firstName))
      .snapshotChanges().pipe(map(
        changes=>{
          return changes.map(c=>({
            ... c.payload.val()
          }))
        }
      )).subscribe(users=>console.log("users with that firstname: ",users))
  }

Вот так выглядит моя база данных firebase:

enter image description here

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