Как присвоить значение переменной компонента из службы, получающей данные из базы данных (угловая 6 и пожарная база)? - PullRequest
0 голосов
/ 07 сентября 2018

Я новичок в угловом программировании, и вопрос, конечно, прост, но это сводит меня с ума!

У меня есть база данных в Firestore, и я получаю данные из нее с помощью службы.

Данные структурированы с помощью интерфейсов (вложение других интерфейсов, включая массив ...)

Мой сервис:

@Injectable({
  providedIn: 'root'
})
export class InfogeneriqueServicesService {

  ItemsInfoGeneriqueCollection : AngularFirestoreDocument<Navigation>;

  Infogenes: Observable<Navigation>;   

  constructor(public afs: AngularFirestore) {

  this.ItemsInfoGeneriqueCollection = this.afs.doc('user/7878AZEVZAEV4'); 
  this.Infogenes = this.ItemsInfoGeneriqueCollection.valueChanges();

  } getInfoSGeneriques(){    
   return this.Infogenes;

}

Мой компонент ts:

import {Navigation} from '../StructureInterfaces/structuresInter';
import { InfogeneriqueServicesService } from '../services/infogenerique-services.service';
...

Nav : Navigation;
...
constructor(private adapter: DateAdapter<any>, private NaviService : InfogeneriqueServicesService) {}

ngOnInit(){

     this.NaviService.getInfoSGeneriques().subscribe(IDperso =>{
    this.Nav = IDperso;

   });


   this.selectedgrade = this.Grades[this.Nav.id.grade-1].viewValue;

ия получаю сообщение об ошибке:

ОШИБКА TypeError: "this.Nav не определено"

Это потому, что this.Nav еще не сгенерирован в данный момент?Должна ли инструкция this.selectegrade ... подождать, пока данные будут сгенерированы (и как?), Или есть проблемы с кодом?

Буду признателен за любую помощь ... Спасибо!

1 Ответ

0 голосов
/ 07 сентября 2018

Переместите код для установки selectedGrade внутри getInfoSGeneriques функции обратного вызова, поскольку выполняемая функция является асинхронной

ngOnInit(){
  this.NaviService.getInfoSGeneriques().subscribe(IDperso =>{
    this.Nav = IDperso;
    this.selectedgrade = this.Grades[this.Nav.id.grade-1].viewValue; 
  });
}
...