Я просто запутался в наблюдаемых и предметах Ангулара. Я уже искал похожие вопросы, но не нашел правильного ответа на свои вопросы.
Допустим, у меня есть наблюдаемая переменная типа, которая прослушивает изменения данных в Firestore и сохраняет изменения следующим образом:
export class AcademyProvider {
public currentAcademy: Observable < any > ;
private db: any;
constructor(public http: HttpClient,
private afs: AngularFirestore,
private accountProvider: AccountProvider) {
this.db = firebase.firestore();
}
//This method gets the details of the current logged academy
getCurrentAcademy(academyID): Promise < any > {
return new Promise((resolve, reject) => {
this.db.collection("academy").where("id", "==", academyID).onSnapshot(
(academy) => {
if (!academy.empty) {
this.currentAcademy = academy.docs[0].data();
console.log(this.currentAcademy);
resolve(academy.docs[0].data());
} else {
//academy does not exist
reject(false);
}
},
//academy error
(error) => {
reject(error);
})
});
}
}
Теперь я хочу прослушать переменные currentAcademy на разных страницах, например, на проигрывателях или на странице настроек, используя тот же AcademyProvider.
Я имею в виду, что я хочу использовать переменную currentAcademy в качестве наблюдателя изменений Firestore (что в настоящее время выполняется с помощью приведенного выше кода), а также в качестве наблюдаемого, которое слушают компоненты других страниц.
Это возможно? Я сталкивался с некоторыми учебниками, использующими тип Subject, но у меня не получилось, чтобы он работал с моим кодом.
Примечание: я знаю, что могу получить значения переменной currentAcademy с других страниц, например: AcademyProvider.currentAcademy ['FieldName'] или около того, но это не всегда гарантирует, что возвращаемое значение является самым последним.
Заранее спасибо!