javascript - 动态绑定(bind)图像 Angular 8

标签 javascript arrays angular typescript

我有对象数组,我需要根据信用卡类型动态添加图像图标,

ts文件

  icon: any;

  savedCreditCard = 
  [
  {
    cardExpiryDateFormat: "05/xx",
    cardNumberLast: "00xx",
    cardId: "xxx",
    cardType: "Mastercard",
    cardExpiryDate: "xx05",
    paymentChannelId: 9,
    cardNumberMasked: "512345XXXXXXXXXX"
  },
  {
    cardExpiryDateFormat: "11/xx",
    cardNumberLast: "58xx",
    cardId: "xxx",
    cardType: "Amex",
    cardExpiryDate: "xx11",
    paymentChannelId: 16,
    cardNumberMasked: "379185XXXXXXXXX"
  }
]

  ngOnInit() {
        this.savedCreditCard.forEach((x => {
      if (x.cardType === 'Mastercard') {
        this.icon = '../../assets/svg/logo-mastercard.svg';
      } else if (x.cardType === 'Amex') {
        this.icon = '../../assets/svg/icon-amex.svg';
      }
    })
    );
  }

在 HTML 模板上,我尝试根据信用卡类型动态绑定(bind)图像,这是我尝试过的,

html文件

    <div class="flex-float">
      <div class="float-end">
        <img class="select--icon" [src]="icon" />
        <p class="selected--desc is-hidden-mobile-xs">
          {{ selectedCard.cardType }}
        </p>
      </div>
    </div>

问题是我只有相同的图标,尽管是 mastercard 或 amex,我想在 stackblitz 上重现,但它不支持静态图像,有人知道如何解决这个问题或任何建议吗?

最佳答案

只有一个 icon 变量,它在每次 forEach() 迭代时被重新分配一个新的图标路径。并且这个icon用于所有卡片,因此只显示一张图像。

方法一:

你可以有一个像这样的图标对象

var icons = {
 'Mastercard': '../../assets/svg/logo-mastercard.svg',
 'Amex': '../../assets/svg/icon-amex.svg'
}; 

在 HTML 中,只需根据卡片类型使用适当的图标即可。

<div class="flex-float">
  <div class="float-end">
    <img class="select--icon" [src]="icons[selectedCard.cardType]" />
      <p class="selected--desc is-hidden-mobile-xs">
        {{ selectedCard.cardType }}
      </p>
  </div>
</div>

无需对 ngOnInit() 中的 saveCreditCard 数组进行任何更改。

方法 2:

如果要在saveCreditCard 中的每个对象上存储图标,则Array.map()可以使用。

ngOnInit() 中,为每张信用卡分配图标。

ngOnInit() {
  this.savedCreditCard = this.savedCreditCard.map(card => {
    let icon;
    if (card.cardType === 'Mastercard') {
      icon = '../../assets/svg/logo-mastercard.svg';
    } else if (card.cardType === 'Amex') {
      icon = '../../assets/svg/icon-amex.svg';
    }

    return {...card, "icon": icon};
  }); 
}

然后在 HTML 中,使用卡片的 icon 属性。

<div class="flex-float">
  <div class="float-end">
    <img class="select--icon" [src]="selectedCard.icon" />
      <p class="selected--desc is-hidden-mobile-xs">
        {{ selectedCard.cardType }}
      </p>
  </div>
</div>

关于javascript - 动态绑定(bind)图像 Angular 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58108587/

相关文章:

javascript - 使用 $filter 根据 Angular Controller 中的属性对对象数组进行排序

html - 如何将 div 的宽度绑定(bind)到 angular 2.0 中的模型?

angular - 如何让组件在angular2中检测到它的隐藏状态?

javascript - 如何更新并发送 Backbone 模型到express后端

javascript - 如何在 charts.js 中旋转饼图?

javascript - IE11,无法获取函数的参数

java - 如何构建二维数组金字塔

javascript - 递归函数调用在 console.log() 上返回 [Circular]

c++ - 如果大小未知,如何通过引用将一维数组作为参数传递?

angular - 你如何从 Angular 4 的父组件继承模板?