样式化ngfor生成的dom元素

时间:2019-04-14 08:30:18

标签: angular dom styling ngfor

背景:因此,我从后端获取了一些数据,这些数据将作为数组存储在Angular前端。现在,我试图在模板上显示所有这些元素(即产品)。我基本上想要实现的是用户可以浏览的页面上的产品。

问题:问题是ngfor只是在模板上的垂直线上一个接一个地绘制元素。我想要的是能够应用常规样式设置(也许在承载ngfor的父元素上),以便元素根据视口从页面的左上角到行数从1到X的右上角宽度,然后继续以下行,直到原始数组中没有剩余。 PS。我尝试在父元素中使用css网格和flexbox,但是它们只是被模板忽略了。

如果有人能指出我实现预期结果的方向,我将不胜感激。

我的模板代码如下:

<div id="backGroundImage">
  <div id="salesPageContainer">
    <div id="saleItemsContainer" >
      <div *ngFor="let saleItem of saleItems" id="itemContainer" >
        <p id="itemName">{{ saleItem.itemName }}</p>
        <p id="itemPrice">{{ saleItem.itemPrice }}</p>
        <img [src]="imageUrl + saleItem.imageID" alt="" id="itemImage" />
      </div>
    </div>
  </div>
</div>

1 个答案:

答案 0 :(得分:1)

在此处检查示例实施情况 WORKING STACKBLITZ

如果您的应用中有引导程序,请添加class="d-flex flex-wrap" like below

<div id="backGroundImage">
  <div id="salesPageContainer">
    <div id="saleItemsContainer" class="d-flex flex-wrap">
      <div *ngFor="let saleItem of saleItems" id="itemContainer" >
        <p id="itemName">{{ saleItem.itemName }}</p>
        <p id="itemPrice">{{ saleItem.itemPrice }}</p>
        <img [src]="imageUrl + saleItem.imageID" alt="" id="itemImage" />
      </div>
    </div>
  </div>
</div>

普通css 中,将css display: flex; flex-wrap: wrap;应用于id="saleItemsContainer"

<div id="backGroundImage">
  <div id="salesPageContainer">
    <div id="saleItemsContainer">
      <div *ngFor="let saleItem of saleItems" id="itemContainer" >
        <p id="itemName">{{ saleItem.itemName }}</p>
        <p id="itemPrice">{{ saleItem.itemPrice }}</p>
        <img [src]="imageUrl + saleItem.imageID" alt="" id="itemImage" />
      </div>
    </div>
  </div>
</div>

使用CSS网格

<div id="backGroundImage">
  <div id="salesPageContainer">
    <div id="saleItemsContainer">
      <div *ngFor="let saleItem of saleItems" id="itemContainer" >
        <p id="itemName">{{ saleItem.itemName }}</p>
        <p id="itemPrice">{{ saleItem.itemPrice }}</p>
        <img [src]="imageUrl + saleItem.imageID" alt="" id="itemImage" />
      </div>
    </div>
  </div>
</div>

将CSS添加到saleItemsContainer

#saleItemsContainer {
  display: grid;
  grid-column-gap: 0.5rem;
  grid-row-gap: 0.4rem;
  grid-template-columns: auto auto auto;
}