javascript - 页面重新加载后使用 Firestore 对 Angular 进行数据持久性
问题描述
一旦出于任何原因重新加载页面,我如何在我的 Firestore 服务器上保留或召回数据?基本上在其中一个组件中,我向一些数据发出请求,默认情况下这些数据在我的登录服务组件上被初始化,让我们说:
USER Component
export class UserComponent implements OnInit {
resumeAccount: UserResumeAccount = {
amountInAccount: 0,
allDetails: null,
};
constructor(
private userLogged: LoginService) {}
ngOnInit(): void {
this.resumeAccount.allDetails = this.userLogged.resumeAccount.allDetails;
this.resumeAccount.amountInAccount = this.userLogged.resumeAccount.amountInAccount;
}
}
然后在服务上,我部署了有关显示或不显示此用户记录信息的逻辑,一旦记录访问 firebase /firestoree 数据。一旦用户登录,数据就会正确显示,但如果出于任何原因页面重新加载所有数据尽管用户根据 getUserState() 方法处于活动状态,但仍会迷路:
LoginService component
@Injectable()
export class LoginService {
//variables
userdata: UserDataModel = {
uid: '',
restData: '',
};
userResumeAccount: UserResumeAccount = {
amountInAccount: 0,
allDetails: null,
};
totalAmount: number = 0;
resumeAccount: UserResumeAccount = {
amountInAccount: 0,
allDetails: null,
};
//constructor
constructor(
private userLogin: AngularFireAuth,
private docCreator: AngularFirestore,
private router: Router
) {}
ngOnInit():void {
this.userLogin.setPersistence(auth.Auth.Persistence.SESSION);
}
//methods
async logInUser(SignUpData: LoginData) {
let { emailUser, passwordUser } = SignUpData;
await this.userLogin.setPersistence(auth.Auth.Persistence.SESSION);
let responseOk = await this.userLogin.signInWithEmailAndPassword(emailUser,passwordUser);
this.userdata.uid = await responseOk.user.uid;
this.userdata.restData = await responseOk.user;
let pathUserName = await this.docCreator==>path to the document inside the firestore
.collection('users')
.doc(this.userdata.uid);
await pathUserName========>getting the firestore data and asigning it to variables
.get()
.toPromise()
.then(async (result) => {
if (result.exists) {
this.resumeAccount.allDetails = await result.get('userName');
this.resumeAccount.amountInAccount = await this.totalAmount;
} else return console.log('not Document Found');
})
.then(() => {})
.catch((err) => {
console.log('Error getting document:', err);
});
}
getUserState() {
return this.userLogin.authState.pipe(map((userLoged) =>{return (console.log(userLoged),
userLoged)}));
}===>ON RELOAD THIS METHOD STILL SHOWS USER ACTIVE
}
因此,基本上在触发登录过程的方法的前一部分中,我访问了存储在 firestore 中的数据;同样在 ngOnInit 方法中,我为该部分建立了一个持久性方法,假装在页面重新加载后保持数据到达,但这是错误的!,以及它在 loginUser 方法开始时的初始化也是如此。我该如何改善这个问题。真的提前谢谢
解决方案
推荐阅读
- python - 另一个用户授予访问权限
- sql - 上一年和当年
- python - 由于 EnvironmentError 无法安装软件包:[Errno 2] 没有这样的文件或目录 \\METADATA
- wordpress - 如何在 WordPress 中更改博客终端的字体和背景颜色?
- r - 如何强制列表对象键入“整数”,R中的错误
- java - 带有文件的 AmazonS3Client.putObject 保持对文件的开放引用
- c - 如何在c中使用exec多次运行ping
- c - 字符串文字可以与 char* 连接吗?
- java - 以下类的超类型无法解析。请确保您在类路径中具有所需的依赖项:
- mongodb - 在创建期间强制 MongoDB 副本集使用 IP 而不是主机名