在 Angular HTML 中动态添加翻转卡片

Posted

技术标签:

【中文标题】在 Angular HTML 中动态添加翻转卡片【英文标题】:Dynamically adding flip cards in Angular HTMl 【发布时间】:2020-03-14 03:07:00 【问题描述】:

我正在从我的数据库中检索项目列表。我想生成与从数据库中检索到的元素数量一样多的翻转卡片。有没有办法在每张卡片上动态添加带有相应项目标签的翻转卡片?

这是当前代码:

records.component.html

<app-card></app-card>

records.component.ts

import  Component, OnInit  from '@angular/core';

@Component(
  selector: 'app-records',
  templateUrl: './records.component.html',
  styleUrls: ['./records.component.scss']
)
export class RecordsComponent implements OnInit 

  constructor()  

  ngOnInit() 
  

card.component.html

<div class="tp-wrapper">
	<div class="tp-box" (click)="toggleFlip()" [@flipState]="flip">
		<div class="tp-box__side tp-box__front">
            <label style="color: lawngreen;">Institute Name</label>
            <label style="color: lawngreen;">Date of Visit</label>
		</div>
		<div class="tp-box__side tp-box__back">
            <label style="color: lawngreen;">Prescription</label>
            <label style="color: lawngreen;">Medicine</label>
            <label style="color: lawngreen;">Type</label>
            <label style="color: lawngreen;">Duration</label>
            <label style="color: lawngreen;"> Per day</label>
		</div>
	</div>
</div>

card.component.ts

import  Component, OnInit  from '@angular/core';
import  trigger, state, style, transition, animate  from '@angular/animations';


@Component(
  selector: 'app-card',
  templateUrl: './card.component.html',
  styleUrls: ['./card.component.scss'],
  animations: [
    trigger('flipState', [
      state('active', style(
        transform: 'rotateY(179deg)'
      )),
      state('inactive', style(
        transform: 'rotateY(0)'
      )),
      transition('active => inactive', animate('500ms ease-out')),
      transition('inactive => active', animate('500ms ease-in'))
    ])
  ]
)
export class CardComponent implements OnInit 

  constructor()  

  ngOnInit() 
  

  flip: string = 'inactive';

  toggleFlip() 
    this.flip = (this.flip == 'inactive') ? 'active' : 'inactive';
  

在记录页面中,我希望根据我从数据库中检索的项目数[作为列表检索]动态添加卡片。

【问题讨论】:

为什么不直接使用 *ngFor? 【参考方案1】:

在您的RecordsComponent 中,添加一个属性,该属性包含具有相应属性的卡片对象数组,例如:

cards = [ id: 1, label: 'First Card',  id: 2, label: 'Second Card',  id: 3, label: 'Third Card'];

从数据库中检索属性后,您可以使用服务调用或任何其他您需要的方式更新属性。

像这样更改RecordsComponent 模板:

<app-card *ngFor="let card of cards" [label]="card.label"></app-card>

[title]="card.label" 是您的 AppCard 组件的输入,您需要在类中定义:

export class CardComponent implements OnInit 
...
@Input label: string;
...

然后在你的模板中:

<div class="tp-wrapper">
	<div class="tp-box" (click)="toggleFlip()" [@flipState]="flip">
        ...
        <div> label <div>
        ...
	</div>
</div>

您可以将整个对象传递到输入中,而不仅仅是label,在这种情况下,您的属性将被称为card,然后您可以在模板中访问属性,如 card.title card.id 等.

【讨论】:

我已经尝试过您的建议,但卡片无法加载,并且我收到一个空白页。这是代码stackblitz.com/edit/angular-mqhz44的链接,请纠正我的错误。 你的回答帮助了我..非常感谢。 !但我有一个小问题......我已将卡片如何在屏幕上显示的图像附加到上述问题中。你能建议我一种从边缘开始以连续形式显示它们的方法吗? @AkhileshPothuri 请删除屏幕截图并发布一个单独的问题,因为这是一个不同的主题。谢谢!【参考方案2】:

请通过实现 OnInit 接口在 ngOnInit 方法中初始化您的卡片。

constructor()
  cards: any; 
  ngOnInit() 
    this.cards = [ id: 1, title: 'First Card',  id: 2, title: 'Second Card',  id: 3, title: 'Third Card'];
  

【讨论】:

以上是关于在 Angular HTML 中动态添加翻转卡片的主要内容,如果未能解决你的问题,请参考以下文章

Angular:从卡片路由到新视图

Flip-Card CSS/HTML:翻转时卡片背面不显示

html Bootstrap 4翻转卡片

angular-material md-card 动态高度

卡片翻转动画 Internet Explorer 11

12.卡片翻转映射