Если вы ищете полный список пользователей, вы должны сделать следующее в соответствии с документацией angularfire2 .
import { Component } from '@angular/core';
import { AngularFireDatabase } from '@angular/fire/database';
import { Observable } from 'rxjs';
@Component({
selector: 'app-root',
template: `
<ul>
<li *ngFor="let item of items | async">
{{ item | json }}
</li>
</ul>
`,
})
export class AppComponent {
items: Observable<any[]>;
constructor(db: AngularFireDatabase) {
this.items = db.list('users').valueChanges();
}
}
Если вы хотите получить только пользователя с UID = 0sv0em .... вам следует использовать запрос типа orderByChild
с equalTo
следующим образом:
db.list('/users', ref => ref.orderByChild('meta/name').equalTo('myName')).snapshotChanges()
, который отфильтрует список пользователей для пользователя с именем = 'myName'.
Самый простой способ продемонстрировать это - быстро адаптировать демонстрацию StackBlitz, которую вы найдете в документации angularfire2 (раздел «4. Запросы списков»), здесь .
Итак, перейдите к демонстрации StackBlitz ( здесь ) и измените следующие элементы:
- Значение конфигурации в
app.module.ts
с вашей собственной конфигурацией Firebase
- Строка № 21 в
app.component.ts
до следующего: size ? ref.orderByChild('meta/name').equalTo(size) : ref
- Одна или несколько кнопок, присутствующих в
app.component.html
, например, <button (click)="filterBy('John')">John</button>
если у вас есть пользователь по имени Джон.
Вы также можете адаптировать строку # 5 из app.component.html
к {{ item.payload.val().meta.phone }}
для отображения, например. телефон.
Я должен признать, что эта модификация StackBlitz немного быстрая и грязная, поскольку мы сохраняем имя переменной size
, пока мы фильтруем name
.... но она выполняет свою работу, показывая, как выполняется запрос с orderByChild()
wor ks.