Лучший способ отображения данных (объекта) в шаблоне ANGULAR5

1

каков наилучший способ отображения данных в шаблоне 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**
          });
      }
  });

Какое лучшее решение, или, возможно, есть другое решение. Спасибо }

Теги:
angular
angular5

2 ответа

1
Лучший ответ

Может возникнуть задержка в ответе службы, так как она асинхронна, поэтому вы должны добавить условие 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)); 
            }
          });
      }
  });
  • 0
    Хорошо, круто, спасибо за этот момент. Так вы думаете, что лучше создать «имя» в коде?
  • 0
    да. Я также рекомендую иметь models для строгой печати
1

Вы также можете добавить условие к HTML как

<span> {{testMembers ? testMembers[0]?.name : ' '}} </span>

Поскольку получение данных может занять некоторое время, и сначала выпустить HTML, чтобы это условие помогло избежать этой ошибки.

  • 0
    ах да круто спасибо. Как вы думаете, более эффективно добавлять данные прямо в шаблон, как это?
  • 0
    Да. Это будет более эффективным и уменьшит нежелательные условия в файле ts компонента.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню