Angular 4 -> Переместить объекты в массив

У меня проблема с добавлением нового объекта в существующий массив.

Что я пытаюсь сделать -> Я пытаюсь вставить новую карту, нарисованную в существующий массив/объект

app.component.ts

     @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css']
      })
      export class AppComponent {
      title = 'app';
      deck: any;
      cards = [];
      hand = 0;
      cardCount: number;

      constructor(private _data: DataService){
        console.log("Data Service ready to query api");

      };


      newDeck(){
            this._data.newDeck().subscribe(res => this.deck = res.json());

      }

      deal(cardCount){
          this._data.deal(cardCount, this.deck.deck_id).subscribe(response => this.cards = response.json());

          if(this.cards){

            this.cards.push(this.cards);

          }
      }

app.component.html

    <h1>New Game</h1>
    <button (click)="newDeck()">Start</button>

    <p>{{ deck.remaining }} cards left!</p>

    <div>
      <h2>Your Hand</h2>
        <button (click)="deal(2)">Deal</button> <button (click)="deal(1)">Hit</button>
        <img width="150" src="{{cards.cards[0].image}}">
        <img width="150" src="{{cards.cards[1].image}}">
        <img width="150" src="{{cards.cards[2].image}}">
        <img width="150" src="{{cards.cards[3].image}}">
    </div>

    <!-- <div *ngFor="let card of cards">

        <img src="{{card.cards.image}}" width="150px" style="padding: 50px; margin: 10px;">

    </div> -->

Да, мой *ngFor не работает, потому что он не верит, что карты хранятся в массиве.

ОШИБКА -> Ошибка при попытке сравнения «[object Object]». Разрешены только массивы и итерации

Тем не менее, я прикрепил скриншот происходящего. Я могу выбрать кнопку «Сделка», но когда я нажимаю Hit, счетчик вытягивает только 1 карту, но она не сохраняется в массиве. Вместо этого он действует как новый объект и отображается как card.cards[0].image вместо card.cards[2].image, поскольку после нажатия кнопки сделки в массиве уже есть 2 объекта.

Любые идеи о том, как вставить новые карты в массив карт? Изображение

Это может помочь увидеть, как карты принимаются при вызове ->

                {
                  "remaining": 50,
                  "deck_id": "1omsivg9l9cu",
                  "success": true,
                  "cards": [
                      {
                          "image": "http://deckofcardsapi.com/static/img/KS.png",
                          "images": {
                              "svg": "http://deckofcardsapi.com/static/img/KS.svg",
                              "png": "http://deckofcardsapi.com/static/img/KS.png"
                          },
                          "suit": "SPADES",
                          "value": "KING",
                          "code": "KS"
                      },
                      {
                          "image": "http://deckofcardsapi.com/static/img/AH.png",
                          "images": {
                              "svg": "http://deckofcardsapi.com/static/img/AH.svg",
                              "png": "http://deckofcardsapi.com/static/img/AH.png"
                          },
                          "suit": "HEARTS",
                          "value": "ACE",
                          "code": "AH"
                      }
                  ]
              }

person Chris Simmons    schedule 04.11.2017    source источник
comment
Этот ряд выглядит немного сложно: this.cards.push(this.cards);   -  person Commercial Suicide    schedule 04.11.2017
comment
Следует ли изменить эту строку?   -  person Chris Simmons    schedule 04.11.2017
comment
Не могу сказать, я понятия не имею, чего вы пытаетесь достичь.   -  person Commercial Suicide    schedule 04.11.2017
comment
следите за своим источником src="{{card.cards.image}}", у вас есть cards, который представляет собой массив, а не простой объект. Обновите сообщение с образцом объекта json   -  person Aravind    schedule 04.11.2017
comment
@CommercialSuicide Я пытаюсь вытащить новые карты с помощью кнопки нажатия. Кнопка удара делает cardCount = 1, затем вытягивает 1 карту. Прямо сейчас он рисует карту как отдельный объект — я хочу сохранить ее вместе с другими картами в одном массиве.   -  person Chris Simmons    schedule 04.11.2017
comment
@Aravind должен быть src={{card.cards[0].image}}?   -  person Chris Simmons    schedule 04.11.2017


Ответы (1)


Вы можете напрямую использовать объект card.cards в своем ngFor

<span *ngFor="let item of data.cards">
      <img src="{{item.image}}" width="150px" style="padding: 50px; margin: 10px;">

</span>
person Aravind    schedule 04.11.2017
comment
Чувак, ты прекрасен, спасибо! Не мне просто нужно научиться хранить новую карту в массиве с другими картами. Большое спасибо - person Chris Simmons; 04.11.2017
comment
Я не решаюсь отметить ответ, так как у меня есть еще одна огромная проблема - person Chris Simmons; 04.11.2017
comment
Привет, @Aravind, основываясь на приведенных выше сценариях, есть идеи о том, как добавлять новые карты в массив карт? - person Chris Simmons; 04.11.2017
comment
Я не понял вашего вопроса, не могли бы вы уточнить? - person Aravind; 04.11.2017
comment
Я прошу помощи в добавлении новых карточек в массив карточек в app.component.ts. - person Chris Simmons; 04.11.2017
comment
ты доступен в тимвьювере? - person Aravind; 04.11.2017