Angular, Cant достигают содержания объектов массива - PullRequest
3 голосов
/ 22 сентября 2019

Я хочу использовать API криптовалюты и получаю данные с сервера в мой список "_ coins: coin []" .Я попытался "Console.log (_coins)" , консоль показывает массив, также я могу открыть этот список на html-странице с помощью "* ngFor" , но я не могу открыть в файле .ts,

я попробовал это на компоненте

public _coins:coin[]=[];
  constructor(private _coinrepo:CoinRepository) {
    this._coins=this._coinrepo.getMultiCoins(["BTC","ETH"]);
    console.log(this._coins);
   }

и на консоли:

Array []​
0: Object { KEY: "BTC", BTC: 1, USD: 10018.38, … }
1: Object { KEY: "ETH", BTC: 0.02072, USD: 207.49, … }
length: 2
<prototype>: Array []

, но я попробовал

public _coins:coin[]=[];
  constructor(private _coinrepo:CoinRepository) {
    this._coins=this._coinrepo.getMultiCoins(["BTC","ETH"]);
    this._coins.forEach(i=>{
      console.log(i);
    });
   }

и на консоли ничего .Я также пытался за цикл, .find, .pop ... ничего не работает.я хочу взять данные как:

for(let item of this._coins){
      _btc=item.BTC;
      _usd=item.USD;
    }

Пожалуйста, помогите мне .. коды здесь: https://stackblitz.com/edit/angular-ejrojd?embed=1

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Вы не должны возвращать массив [или подписываться в службе] из this._coinrepo.getMultiCoins(["BTC","ETH"]), вместо этого вы должны возвращать наблюдаемое и затем подписываться в компоненте.Потому что this.restService.getMultiCoin(c_list.toString()) - это асинхронный вызов, который не будет немедленно возвращен.Измените свой метод следующим образом:

 getMultiCoins(c_list:string[]): Observable<coin[]>{
    return this.restService.getMultiCoin(c_list.toString())
        .pipe(
          map(apiRes => {

            for (let item in apiRes) {
               this.coins.push(
                { KEY: item, BTC: apiRes[item].BTC, USD: apiRes[item].USD, EUR: apiRes[item].EUR, TRY: apiRes[item].TRY }
            )
        }                
            return this.coins;
          })
        )
 }

Теперь в вашем компоненте подпишитесь на Observable, возвращаемый из getMultiCoins API, чтобы развернуть массив coins следующим образом:

public _coins:coin[]=[];
  constructor(private _coinrepo:CoinRepository) {
    this._coinrepo.getMultiCoins(["BTC","ETH"]).subscribe((coins) => {
      this._coins = coins;
        this._coins.forEach(i=>{
        console.log(i);
      });
     }
    );        
   }

Надеюсь, этопомогает.

0 голосов
/ 23 сентября 2019

Это объект, который вы не можете использовать для цикла или forEach, попробуйте этот код:

for(const key in this._coins){
     console.log("key : ", key , " val : ", this._coins[key]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...