Как сопоставить данные о пожарных хранилищах с машинописным интерфейсом в приложении Ioni c / Angular? - PullRequest
0 голосов
/ 03 мая 2020

Ниже приведена пара документов, которые я получаю из магазина:

enter image description here

Вот метод, который я использую:

private _mechanics = new BehaviorSubject<User[]>([]);

fetchMechanics() {

    return of(
      firebase.firestore().collection("users").where("isMechanic", "==", false)
        .get()
        .then((docs) => {
          const data = []
          docs.forEach((doc) => {
            data.push(doc);
          });
          console.log('Service Data:', data);
          this._mechanics.next(data)
        }).catch((err) => {
          console.log(err);
        })
    );

  }

Теперь я хочу преобразовать данные в соответствии с моим UserData интерфейсом:

interface UserData {
  userId: string,
  userName: string,
  isMechanic: boolean,
  location: PlaceLocation
}

Может кто-нибудь сказать, какие изменения мне нужно внести в fetchMechanics(), чтобы сделать это?

Вот пример данных в firestore:

enter image description here

Также я пытался скопировать приведенный ниже код, но это не так До сих пор работал:

private _users = new BehaviorSubject<User[]>([]);

fetchUsers() {
    return this.http
      .get<{ [key: string]: UserData }>('firebaseUrl/users.json')
      .pipe(map(resData => {
        const users = [];
        for (const key in resData) {
          if (resData.hasOwnProperty(key)) {
            users.push(
              new User(
                key,
                resData[key].userName,
                resData[key].isMechanic,
                resData[key].location)
            );
          }
        }
        return users;
      }),
        tap(users => {
          this._users.next(users);
        })
      );
  }

1 Ответ

1 голос
/ 03 мая 2020

если данные в коллекции имеют ту же структуру, что и интерфейс, вы можете просто привести объект к интерфейсу следующим образом

interface UserData {
  userId: string,
  userName: string,
  isMechanic: boolean,
  location: PlaceLocation
}

private _mechanics = new BehaviorSubject<UserData[]>([]);

constructor(private firestore: AngularFirestore) {
}

fetchMechanics() {

  return this.firestore
    .collection("users")
    .ref
    .where("isMechanic", "==", false)
    .get().then((querySnapshot) => {
        const data: UserData[] = [];
        querySnapshot.forEach((doc) => {
            data.push(doc.data() as UserData);
            console.log(doc.id, " => ", doc.data());
        });
        this._mechanics.next(data)
    });

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