【问题标题】:Angular 7 iterate json by button clickAngular 7通过按钮单击迭代json
【发布时间】:2019-05-24 04:20:47
【问题描述】:

正如我在标题中提到的,我想通过单击我的 json 响应的按钮进行迭代。请参阅下面我的 json 文件:

{
    "id": 2,
    "name": "Słownictwo",
    "flashcardLists": [
        {
            "id": 17,
            "frontside": "dasfasdv",
            "backside": "csdascd"

        },
        {
            "id": 18,
            "frontside": "dsadsaad",
            "backside": "sdasdadad"
        },
        {
            "id": 19,
            "frontside": "dasdsadd",
            "backside": "sdaddsa"
        }
    ]
}

抽认卡HTML:

<div  class="flip-container" (click)="flip()" [class.flipped]="flipped" >
    <mat-card-header></mat-card-header>
    <mat-card-content *ngFor="let flashcard of flashcardLists" class="flipper">
    <mat-card class="front">
       {{flashcard.frontside}}
    </mat-card>
    <mat-card class="back">
      {{flashcard.backside}}
    </mat-card>
    </mat-card-content>
</div>

我有一次我只想要一个“正面”和“背面”的组件。 接下来,它将被单击的按钮替换,这将增加计数器,但我不知道该怎么做。我尝试了类似flashcard[0].frontside 的方法,但结果是 KO。也许有人遇到过同样的问题,可以帮助我。

提前感谢所有答案

【问题讨论】:

  • 你想同时显示所有卡片,然后点击按钮全部切换到下一张吗?还是您只想显示一张卡片,单击按钮时将更改为下一张?从您的代码看来,您的视图包含所有卡片的列表...
  • 有一张卡片通过点击改变它的侧面。我还有另一个按钮要迭代
  • {{flash[i].frontside}} {{flash[i].backside}}
  • 我还是不明白,你想让每张卡片都能从前翻到后,从后翻到前?

标签: html arrays json angular typescript


【解决方案1】:

如果我理解正确的话,你想翻一张牌。

应该这样做:

<mat-card-content *ngFor="let flashcard of flashcardLists" class="flipper">
  <mat-card [class.front]="!flashcards[i].isFlipped"
            [class.back]="flashcards[i].isFlipped"
            (click)="flashcards[i].isFlipped = !flashcards[i].isFlipped "
            >
     {{ flashcards[i].isFlipped ? flashcard.backside : flashcard.frontside }}
  </mat-card>
</mat-card-content>

只需将此卡片状态图添加到您的组件:

flashcards: { [key: string]: boolean } = {};

【讨论】:

  • 如果在灰色区域单击它会翻转,但是当我单击按钮“Nastepna”时我想要下一个值
  • 我忘了告诉它在一种情况下它是有效的。我可以翻转,但我不加载下一个值,因为我无法迭代
【解决方案2】:

您的mat-card-content 中不需要*ngFor,而是将其绑定到flipCard 变量,该变量将在按钮迭代单击时发生变化。至于正面或背面,请使用另一个变量isFront,您将在单击翻转按钮时对其进行更新。像这样:

component.html

<mat-card>
  <mat-card-header></mat-card-header>
  <mat-card-content class="flipper">
    <div class="front" *ngIf="isFront">
      {{flashcard.frontside}}
    </div>
    <div class="back" *ngIf="!isFront">
      {{flashcard.backside}}
    </div>
  </mat-card-content>
  <mat-card-actions>
    <button (click)="iterate()" class="btn-flashcard" mat-button mat-raised-button id="previous">
      Następna
    </button>
    <button mat-button (click)="flip()" [class.flipped]="flipped">LIKE</button>
    <button mat-button>SHARE</button>
  </mat-card-actions>
</mat-card>

component.ts

flashcardList: any[] // use your flashCard class instead of any
flashcard: any; // use your flashCard class instead of any
isFront = true;

ngOnInit() {
  // init first card
  // flashcard = first card
}

iterate() {
  // logic for getting the next card
  // flashcard = next card
  // e.g.
  let index = this.flashcardList.indexOf(this.flashcard);
  this.flashcard = this.flashcardList[index + 1];
}

flip() {
  this.isFront = !this.isFront;
}

【讨论】:

  • 我想我弄错了,你想让每张卡片都能从前到后、从后到前翻转吗?
  • 我在闪存卡的 json 中有一个列表,我想对其进行迭代,我认为在我的迭代器 func i++ 中有类似 flash[i] 的东西
  • 在我的回答中的 iterate func 中为您添加了示例代码
猜你喜欢
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多