толкнул массив неопределен на ngAfterViewinit - PullRequest
1 голос
/ 07 октября 2019

Я поместил некоторые значения в массиве на Angular ngOnInit, и данные стали недоступны для ngAfterViewInit. Это конкретное значение отображается как Undefined

randomNUMber = [];

 ngOnInit() {

this.apiServices.getLineChart(this.coinId).subscribe(resc => {

          for (let i =0 ; i < 8 ; i++) {
            this.randomNUMber.push(Number(resc.data[i].price));
          }

          console.log('price1', this.randomNUMber[2]); //it Works
        });

}

ngAfterViewInit() {
console.log('price1', this.randomNUMber);  //this Wors too
console.log('price1', this.randomNUMber[2]); // But this doesnt work 
}

Ответы [ 2 ]

1 голос
/ 07 октября 2019

ngOnInit () не ожидает асинхронных вызовов, поэтому вы можете сделать следующее:

...
this.myObs$: Observable<any>;

ngOnInit() {
   this.myObs$ = this.apiServices.getLineChart(this.coinId).pipe(map(resc => {
      let randomNUMber: number[] = [];
      for (let i =0 ; i < 8 ; i++) {
         randomNUMber.push(Number(resc.data[i].price));
      }

      return randomNUMber;
    }));
 }

Если вы используете ngAfterViewInit, я думаю, вам нужно правильно отобразить эти данные в вашем шаблоне. Поэтому вам нужно использовать асинхронный канал для подписки на this.myObs $

<div *ngIf="(myObs$ | async) as randomNUMber">
   <p *ngFor="let number of randomNUMber">
    {{ number }}
   </p>
</div>

См. Асинхронный канал

1 голос
/ 07 октября 2019

у вас есть асинхронный вызов в ngOnInit, который не завершен вовремя.

...