[英]Angular service returning undefined to component
我想將返回值傳遞給我的組件。 我使用 firebase 編寫了這項服務。 在我的組件中調用 geLoggedInUser 方法時,它返回未定義。 理想情況下,我想將 doc.id 從我的服務傳遞給我的組件,請幫忙;
服務
docId: any;
getLoggedInUser() {
this.fireAuth.onAuthStateChanged((user) => {
if (user) {
console.log(user.email, 'user is valid');
const db = collection(this.firestore, 'users');
getDocs(db).then((resp) => {
this.data = [
...resp.docs.map((item) => {
return { ...item.data(), id: item.id };
}),
];
//filter users array to get current logged in users data
this.authUser = this.data.filter((item: any) => {
this.docId = user.uid;
return item.email === user.email;
});
});
} else {
this.router.navigate(['/login']);
return;
}
});
return this.docId;
}
零件
ngOnInit(): void {
console.log(this.auth.getLoggedInUser());
}
我建議參與 Promise 和 Observable 的概念。 https://firebase.google.com/docs/reference/js/v8/firebase.auth.Auth
你的問題是當你調用getLoggedInUser()是這樣做的:
return this.docId;
您可以做的是在 SERVICE 中使用可觀察變量並從組件連接到它。
請閱讀以下Firebase:應在 Angular 項目中使用 Promise 還是 Observable?
我希望這有幫助!
在 Angular 中,當您使用服務時,使用變量將數據傳遞給組件並不常見。 為此,您應該使用 observables 或 promises/await/async。
在這種情況下,我建議您使用 observable。 在這里,您有一個如何實現它的示例:
docIdSubject = new BehaviorSubject<any>(null);
Public get docId(){
return docIdSubject.asObservable();
}
getLoggedInUser() {
this.fireAuth.onAuthStateChanged((user) => {
if (user) {
console.log(user.email, 'user is valid');
const db = collection(this.firestore, 'users');
getDocs(db).then((resp) => {
this.data = [
...resp.docs.map((item) => {
return { ...item.data(), id: item.id };
}),
];
//filter users array to get current logged in users data
this.authUser = this.data.filter((item: any) => {
//this.docId = user.uid
return item.email === user.email;
};
this.docIdSubject.next(user.uid);
});
} else {
this.router.navigate(['/login']);
return;
}
})
}
ngOnInit(): void {
this.auth.docId.subscribe(res =>
console.log(res);
);
this.auth.getLoggedInUser();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.