каков наилучший способ отображения данных в шаблоне Angular5 для этого случая:
Я загружаю данные из Firestore (= firebase) здесь:
ngOnInit() {
this.user = this.authService.afAuth.authState;
this.user.subscribe((auth) => {
if (auth) {
this.itemService.getTestMembers(auth.uid).subscribe(testMembers => {
this.testMembers = testMembers;
});
}
});
}
Ответ Firestore: [{"email":"[email protected]","name":"John"}]
1 ° Первое решение в шаблоне для отображения имени:
<span>{{testMembers[0]?.name}}</span>
Работы, отображается имя Но у меня есть ошибка TypeError: _co.testMembers is undefined
2 ° Второе решение в коде для отображения имени:
userName: string;
ngOnInit() {
this.user = this.authService.afAuth.authState;
this.user.subscribe((auth) => {
if (auth) {
this.itemService.getTestMembers(auth.uid).subscribe(testMembers => {
this.testMembers = testMembers;
**this.userName = (JSON.stringify(testMembers[0].name)); <-- here**
});
}
});
Какое лучшее решение, или, возможно, есть другое решение. Спасибо }
Может возникнуть задержка в ответе службы, так как она асинхронна, поэтому вы должны добавить условие if
прежде чем обращаться к объекту, как показано ниже
this.user.subscribe((auth) => {
if (auth) {
this.itemService.getTestMembers(auth.uid).subscribe(testMembers => {
this.testMembers = testMembers;
if(testMembers.length > 0 ) {//////////add this
this.userName = (JSON.stringify(testMembers[0].name));
}
});
}
});
Вы также можете добавить условие к HTML как
<span> {{testMembers ? testMembers[0]?.name : ' '}} </span>
Поскольку получение данных может занять некоторое время, и сначала выпустить HTML, чтобы это условие помогло избежать этой ошибки.
models
для строгой печати